如何在 Laravel 中为 ORM 急切加载添加多个键约束?

Posted

技术标签:

【中文标题】如何在 Laravel 中为 ORM 急切加载添加多个键约束?【英文标题】:How to add multiple key constraints for ORM eager loading in Laravel? 【发布时间】:2017-11-16 18:20:29 【问题描述】:

假设我有三个关系:

 1. departments
        - id (primary)
        - name
 2. quotas
        - id (primary)
        - name
 3. department_quota
        - id (primary)
        - department_id (foreign)
        - quota_id (foreign)
        - number_of_seats
        - unique(department_id, quota_id)

现在,我想通过quota 分组的department 访问number_of_seats,我又想通过quota 分组的department 访问number_of_seats。我需要使用 laravel ORM 急切加载来完成这项任务。

我可以使用departments访问所有quotas

\App\Quota::with('departments')->get();

还有相反的使用 by:

\App\Department::with('quotas')->get();

是的,这是一个多对多的关系。 但是如上所述,我怎样才能访问number_of_seats

我需要这个,因为我要将关系作为JSON 的序列化数据提供给REST

【问题讨论】:

【参考方案1】:

如果两个模型都是belongsToMany,您可以将withPivot() 添加到您的departments() 方法中。

public function departments()
    return $this->belongsToMany('App\Department')->withPivot('number_of_seats');

它将被包含在 json 集合中,并且可以通过代码访问它

foreach(Quota::with('departments')->get() as $quota)
       foreach($quota->departments as $department)
           echo $department->pivot->number_of_seats;
       
    

【讨论】:

以上是关于如何在 Laravel 中为 ORM 急切加载添加多个键约束?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 急切加载与添加子句的关系?

如何在 laravel 中检索用户时急切加载?

Laravel Eloquent 中的急切加载

Laravel 5.4 - 如何对急切加载关系进行分页

Laravel 急切加载多个模型,它们都在同一个表中

Laravel 动态关系 - 在急切加载时访问模型属性