Прямо сейчас у меня есть одна таблица пользователей и дополнительные таблицы user_ [role], такие как user_admins, user_founders, user_vendors и так далее. Как вы понимаете, каждая таблица user_ имеет свои собственные c поля. И все таблицы c для профессий (user_ [role]) связаны с таблицей 'users' и имеют свои собственные модели, такие как UserAdmin, UserVendor.
У них есть отношения, такие как:
Model User . php
public function admin()
{
return $this->hasOne(UserAdmin::class);
}
public function vendor()
{
return $this->hasOne(UserVendor::class);
}
...
Модель UserAdmin. php
public function user()
{
return $this->belongsTo(User::class);
}
Модель UserVendor. php
public function user()
{
return $this->belongsTo(User::class);
}
Это нормально работает. Но это стоит
0.59
"select * from `user_admins` where `user_admins`.`user_id` in (1)"
[]
0.55
"select * from `user_vendors` where `user_vendors`.`user_id` in (1)"
[]
0.36
"select * from `user_customers` where `user_customers`.`user_id` in (1)"
[]
0.31
...
Поскольку мне нужно загружать все эксклюзивные таблицы вместе с пользователем, у меня есть дополнительные sql запросов для каждой роли. Поэтому я пытаюсь оптимизировать это каким-либо образом.
(Это пришло мне в голову прямо сейчас. Чтобы немного снизить нагрузку, я мог бы загружать только роли, которые есть у отдельного пользователя. Как уже было сказано, немного)
Думаю, я мог бы создать таблицу типа «extra_data» с полем для каждой роли и сериализовать (преобразовать) в нее все данные. И, возможно, я мог бы присоединиться к ним.
user_id admin vendor customer ...
1. {"":""} {"":""} null ...
Я мог бы продолжить как есть или изменить его другим подходом. Я уверен, что есть и другие подходы. Если вы столкнулись с такой ситуацией или у вас есть какие-либо проблемы, пожалуйста, дайте мне знать. Мы будем благодарны за любые идеи.