我有users
表和subscriptions
表。
subscriptions
表,它有一个外键列user_id
和枚举类型的其他列status
,并有一组值('canceled','active','skipped','unpaid','pastdue','expired')
在模型中,我定义了它们的关系,比如
public function subscription()
{
return $this->hasMany(Subscription::class);
}
现在我正在实现过滤功能
在我的dataTable类中的这个函数中
public function query(User $model)
{
if ($this->_filters['subscription_status']) {
$status = $this->_filters['subscription_status'];
$model = $model->whereHas('subscription', function($query) use ($status) {
$query->where('status', $status);
});
}
现在,当我试图获得订阅状态为canceled
的用户列表时
结果,我得到了一个状态为active
和cancelled
的用户列表,为什么上面的代码不起作用?
您应该使用with
而不是has
。你可以看到不同。
获取订阅状态已取消的用户列表
$model = $model->with(['subscription' => function ($query) use ($status) {
$query->where('status', status);
}])
获取用户列表订阅状态已取消
$model = $model->whereHas('subscription', function($query) use ($status) {
$query->where('status', $status);
});