Laravel:如何在多态多对多中使用 wherePivot

Posted

技术标签:

【中文标题】Laravel:如何在多态多对多中使用 wherePivot【英文标题】:Laravel: how to use wherePivot in Polymorphic Many to Many 【发布时间】:2017-09-11 13:13:05 【问题描述】:

我想查询我的数据透视表中 isrecurring = 1 的位置,但没有找到现有的解决方案。任何人都有任何经验以及如何在多对多多态数据透视表中获取 'isrecurring' = 1 的所有记录?

Example.
$enroll->products->where('isrecurring', 1);

but in enrollable pivot table
-> get all records that 'isrecurring' = 1

我的模型(没有 wherePivot)

Enroll.php
------
public function products()
return $this->morphedByMany('App\Models\Product', 'enrollable')->withPivot('isrecurring');


Product.php
----
public function enrolls()
return $this->morphToMany('App\Models\Enroll', 'enrollable')->withPivot('isrecurring');

我的数据库

enrolls
-----
id


products
----
id

enrollables
----
enroll_id
enrollable_id
enrollable_type
isrecurring    (boolean)

我希望使用 wherePivot,但似乎无法正常工作且无法查询。

Product.php
----
public function enrolls()
return $this->morphToMany('App\Models\Enroll', 'enrollable')->withPivot('isrecurring')->wherePivot('isrecurring', '=', 1);

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,可以使用以下方法解决:

//Model: User.php

public function certificates()

    return $this->morphedByMany('App\Certificate', 'appliable')
        ->withTimestamps();

//Controller: EnrollmentController.php

$usersWithCertificates = User::whereHas('certificates', function($query)
    $query->where('status', '0');
)->with('certificates')->latest()->paginate(10);

使用function($query) 添加数据透视表的自定义 SQL

你可以在这里阅读更多 Laravel 文档: https://laravel.com/docs/5.5/eloquent-relationships#querying-relationship-existence在查询关系存在部分

【讨论】:

以上是关于Laravel:如何在多态多对多中使用 wherePivot的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 多对多中的雄辩关系通过

SQLAlchemy如何在多对多中按孩子过滤

Laravel Nova 多态多对多关系不起作用

如何通过模板中的对象访问自定义多对多中的字段

在不使用实体框架的多对多中插入记录

使用 Laravel 限制多态多对多关系中的相关记录