#laravel #eager-loading
#laravel #быстрая загрузка
Вопрос:
У меня есть сводная таблица с полями, разработанными ниже.
role_id | module_id | task_id
1 1 1
1 1 2
1 1 3
Это мое отношение к модели для подражания.
class Role extends Model
{
use HasFactory;
public function modules(){
return $this->belongsToMany(Module::class,'role_module_tasks','role_id','module_id')
->withPivot(['task_id'])
->using(RoleModuleTask::class);
}
}
И другое отношение belongsTo в модели RoleModuleTask (сводная таблица).
class RoleModuleTask extends Pivot
{
use HasFactory;
public function task(){
return $this->belongsTo(Task::class,'task_id');
}
}
Я пытаюсь вызвать запрос, как показано ниже.
@foreach (something()->modules as $module)
Module:{{$module->name}} (Task:{{$module->pivot->task->name}} <br>
@endforeach
Затем я проверяю оператор запроса с помощью панели отладки laravel и получил более ста запросов, как показано ниже.
select * from `tasks` where `tasks`.`id` = 1 limit 1
select * from `tasks` where `tasks`.`id` = 2 limit 1
select * from `tasks` where `tasks`.`id` = 3 limit 1
.... so on
Я хотел бы выполнить быструю загрузку для отношения belongsTo. Любые советы или рекомендации по этому поводу были бы весьма признательны, спасибо.
Ответ №1:
Вы можете использовать вложенную нетерпеливую загрузку везде, где вы инициализируете Role
Role::with('modules.task')
Это приведет к быстрой загрузке как Role
отношения модулей a, так и его вложенных отношений задач.
Комментарии:
1. Дорогой гайг, спасибо, но вместо этого мне нужно позвонить из pivot.