首页 > 解决方案 > 如何防止 Laravel 在“has”查询中剥离对某些关系的原始约束?

问题描述

在 Laravel 7.x 中,我有一个User具有hasMany关系 ( roles) 的模型。在整个应用程序中,我可以使用 访问User模型auth()->user(),并且可以使用 访问roles关系auth()->user()->roles

roles关系看起来是这样的,

public function roles()
{
    return $this->hasMany(Role::class, 'role_id', 'role_id');
}

我有一个Controller正在使用 EloquentwhereHas收集一些数据。里面callback提供给whereHas我打电话auth()->user()->roles。然而,当我打这个电话时,Laravel 正在移除对roles关系的原始约束(where users.role_id = roles.role_id)。

这种行为在 Laravel 中似乎是非常有意的(查看HasOneOrMany::addConstraintsRelation::noConstraints在 Laravel Framework 7.x 分支中)。

我能做些什么来防止剥离has关系调用中某些关系的原始约束?

标签: laraveleloquentlaravel-7

解决方案


推荐阅读