Laravel Eloquent 根据数据透视表字段条件获取多对多关系
Posted
技术标签:
【中文标题】Laravel Eloquent 根据数据透视表字段条件获取多对多关系【英文标题】:Laravel Eloquent Getting Many To Many Relations Per Pivot Table Field Condition 【发布时间】:2020-07-28 05:16:57 【问题描述】:我对 Laravel 7 Eloquent 有疑问。我有 2 个由 many to many relation
加入的表。表用户通过pivot
表 PaymentModuleUser 连接到 PaymentModule。我需要在语句is_active = 1
的数据透视表上使用where
。当我在我的模型中使用 toSQL()
时,SQL 返回了很好的结果,但是当我在 Controller 中检查我的 Eloquent Query 时,我恢复的数据忽略了我的 wherePivot 方法(从表中返回所有数据,忽略 is_active = 1
字段订阅者 = null 并让我这个用户.. 如果我的pivotWhere = null
不显示此用户,我必须这样做)。你能指出我的代码哪里出错了吗?
我的 UserTable 模型:
public function subscriber()
return $this->belongsToMany(PaymentsModule::class, 'payment_module_user', 'user_id')->withPivot('is_active');
我的控制器:
$users = User::with(['subscriber'=>function($query)
$query->wherePivot('is_active','=', 1);
])->get();
print_r($users);
【问题讨论】:
你的意思是返回所有用户吗?或返回所有订阅is_activite=0
我的意思是返回订阅过期的用户。
【参考方案1】:
在你的控制器中,尝试使用这个
$query->wherePivot('is_active', 1);
而不是,
$query->wherePivot('is_active','=', 1);
【讨论】:
【参考方案2】:试试
$users = User::with('subscriber' => function($query)
$query->where('payment_module_user.is_active', 1);
)->get();
print_r($users);
数据透视表已经被 eloquent 加入,所以开始使用吧
找到它here。
【讨论】:
以上是关于Laravel Eloquent 根据数据透视表字段条件获取多对多关系的主要内容,如果未能解决你的问题,请参考以下文章
如何在 laravel 5 中使用 Eloquent 更新数据透视表
Eloquent ORM / Laravel - 使用自定义数据透视表结构