我尝试像这样加载关系:
return $task->load('users', 'creator', 'attachments', 'messages.creator');
“用户”与某些字段的多对多关系
user
id
name
...
task
id
name
...
task_user
user_id
task_id
task_status_id
我的轴心模型
<?php
namespace App;
use Illuminate\Database\Eloquent\Relations\Pivot;
class TaskUser extends Pivot
{
public $incrementing = true;
public function status()
{
return $this->hasOne(TaskStatus::class);
}
}
如何正确加载“状态”关系?
发布于 2019-05-21 08:51:38
如果Laravel提供了一种在pivots中传递闭包的方法,那么这并不难,但是目前有两种加载pivot关系的解决方案
1.懒惰急切地加载所有内容。
# App\Task.php
public function users()
{
return $this->belongsToMany(App\User::class)->using(App\TaskUser::class)->withPivot('task_status_id');
}
$task->load('users', ...);
$task->users->each(function ($user) {
$user->pivot->load('status');
});
问题:这将为与Task相关的每个用户创建一个查询。除非对结果进行分页,否则这是典型的N+1问题。
2.使用hasMany和belongsTo。
任务定义$user->tasks_user关系(用户任务TaskUser)
除了不使用belongsToMany
之外,这个实现没有什么真正的问题。
https://stackoverflow.com/questions/56190641
复制相似问题