首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >透视模型中的调用关系

透视模型中的调用关系
EN

Stack Overflow用户
提问于 2019-05-18 00:56:34
回答 1查看 141关注 0票数 0

我尝试像这样加载关系:

代码语言:javascript
复制
 return $task->load('users', 'creator', 'attachments', 'messages.creator');

“用户”与某些字段的多对多关系

代码语言:javascript
复制
user
 id
 name
 ...
task
 id
 name
 ...
task_user
 user_id
 task_id
 task_status_id

我的轴心模型

代码语言:javascript
复制
<?php

namespace App;

use Illuminate\Database\Eloquent\Relations\Pivot;

class TaskUser extends Pivot
{
    public $incrementing = true;

    public function status()
    {
        return $this->hasOne(TaskStatus::class);
    }
}

如何正确加载“状态”关系?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-21 08:51:38

如果Laravel提供了一种在pivots中传递闭包的方法,那么这并不难,但是目前有两种加载pivot关系的解决方案

1.懒惰急切地加载所有内容。

代码语言:javascript
复制
# App\Task.php

public function users()
{
    return $this->belongsToMany(App\User::class)->using(App\TaskUser::class)->withPivot('task_status_id');
}
代码语言:javascript
复制
$task->load('users', ...);
$task->users->each(function ($user) {
    $user->pivot->load('status');
});

问题:这将为与Task相关的每个用户创建一个查询。除非对结果进行分页,否则这是典型的N+1问题。

2.使用hasMany和belongsTo。

任务定义$user->tasks_user关系(用户任务TaskUser)

  • Define $

  • ->tasks_User关系(Task hasMany hasMany TaskUser)

  • Define inverse (TaskUser belongsTo User,TaskUser belongsTo
  • ) belongsTo
  • Define task_user relationship (TaskUser hasOne TaskStatus) (虽然在我看来像belongsTo)
  • Load relationship

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56190641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档