【问题标题】:How to eager loading for belongsTo relationship on pivot table?如何急切加载数据透视表上的 belongsTo 关系?
【发布时间】:2022-01-08 19:42:24
【问题描述】:

我有以下设计字段的数据透视表。

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);
    }
}

还有 RoleModuleTask 模型(数据透视表)上的另一个 belongsTo 关系。

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 关系做急切加载。对此的任何建议或指导将不胜感激,谢谢。

【问题讨论】:

    标签: laravel eager-loading


    【解决方案1】:

    你可以在初始化Role的任何地方使用nested eager loading

    Role::with('modules.task')
    

    这将立即加载Role 的模块关系及其嵌套任务关系。

    【讨论】:

    • 亲爱的,谢谢,但我需要从 pivot 打电话。
    猜你喜欢
    • 2014-09-11
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 2014-01-19
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多