轴心模型中的调用关系

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (7)

我尝试加载关系,如:

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

如何正确加载'状态'关系?

提问于
用户回答回答于

如果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问题。

2.改用hasMany和belongsTo。

  • 定义$ user-> tasks_user relationship(User hasMany TaskUser)
  • 定义$ task-> tasks_user关系(Task hasMany TaskUser)
  • 定义逆(TaskUser belongsTo User,TaskUser belongsTo Task)
  • 定义最后一个task_user关系(TaskUser hasOne TaskStatus)(尽管看起来像belongsTo)
  • 加载关系 $task->load('task_user.user', 'task_user.status')

除了不使用之外,这个实现没有真正的问题belongsToMany

所属标签

可能回答问题的人

  • 西风

    renzha.net · 站长 (已认证)

    7 粉丝1 提问9 回答
  • 四无君

    0 粉丝0 提问3 回答
  • o o

    3 粉丝490 提问2 回答
  • Dingda

    Dingda · 站长 (已认证)

    4 粉丝0 提问2 回答

扫码关注云+社区

领取腾讯云代金券