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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel:如何在多态中使用wherePivot多对多相关的知识,希望对你有一定的参考价值。

我想在我的数据透视表中查询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('AppModelsProduct', 'enrollable')->withPivot('isrecurring');
}

Product.php
----
public function enrolls(){
return $this->morphToMany('AppModelsEnroll', '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('AppModelsEnroll', 'enrollable')->withPivot('isrecurring')->wherePivot('isrecurring', '=', 1);
}
答案

我有同样的问题,可以使用以下方法解决它:

//Model: User.php

public function certificates()
{
    return $this->morphedByMany('AppCertificate', '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 中使用具有多态关系的“group by”?

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

如何在 Laravel 中对所有行使用多态关系?

你如何在 Laravel 4 中插入相关的多态模型

如何将 Laravel 的多态系统应用于似乎被逆转的事物

laravel的多态关联--morphTo和morphMany