尝试使用laravel获取过滤值,但无法正常工作,结果错误



我有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的用户列表时

结果,我得到了一个状态为activecancelled的用户列表,为什么上面的代码不起作用?

您应该使用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);
});

相关内容

  • 没有找到相关文章

最新更新