我尝试像这样的负载关系:
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);
}
}
如何正确加载“状态”关系?
答案 0 :(得分:0)
如果Laravel提供了一种在枢轴中传递闭包的方法,那一点也不难,但是目前有两种解决方案可以加载枢轴关系
# 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问题。
$task->load('task_user.user', 'task_user.status')
除了不使用belongsToMany
之外,此实现没有真正的问题。