Php 在Laravel查询中使用with子句后不能使用where子句

Php 在Laravel查询中使用with子句后不能使用where子句,php,laravel,eloquent,Php,Laravel,Eloquent,我正在使用laravel中的with和where子句编写一个查询 $users = User::query()->with('roles')->where('name', '!=', 'customer')->get(); return $users; 但where子句在这里不起作用。不排除客户。我提供了查询结果的快照 我想你需要: use Illuminate\Database\Eloquent\Builder; $users = User::query()

我正在使用laravel中的with和where子句编写一个查询

 $users = User::query()->with('roles')->where('name', '!=', 'customer')->get();
 return $users;
但where子句在这里不起作用。不排除客户。我提供了查询结果的快照

我想你需要

use Illuminate\Database\Eloquent\Builder;

$users = User::query()
          ->with('roles')
          ->whereHas('roles', function (Builder $query) {
                $query->where('name', '!=', 'customer');
          })
      ->get();

return $users;
我想你需要

use Illuminate\Database\Eloquent\Builder;

$users = User::query()
          ->with('roles')
          ->whereHas('roles', function (Builder $query) {
                $query->where('name', '!=', 'customer');
          })
      ->get();

return $users;

我想您正在尝试在基本查询中过滤关系数据。 试着这样做:

$users=User::query()->with([
“角色”=>功能($q){
$q->where('name','!=','customer');
}])
->get();
返回$users;

我想您正在尝试在基本查询中过滤关系数据。 试着这样做:

$users=User::query()->with([
“角色”=>功能($q){
$q->where('name','!=','customer');
}])
->get();
返回$users;

where()
子句在此处用于
用户
表,而不是
角色
where
仅用于用户查询,而不是角色查询。如果希望在角色查询中使用它,则需要将其作为闭包传递
where()
子句在这里用于
用户
表,而不是
角色
where
仅用于用户查询,而不是角色查询。如果希望在角色查询中使用它,则需要将其作为闭包传递。这不包括客户。但是,它返回所有没有滚动客户的用户。这不包括客户。但是,它返回所有没有roll customer的用户。一个问题是,为什么在查询之前使用Builder。无需声明生成器,它也可以正常工作@sta@AbhijitMondalAbhi这叫做类型暗示。类/接口的对象是强制的,因此不能提供其他对象类型。安全措施。另外,
query()->
也可以跳过。一个问题是为什么在查询之前使用生成器。无需声明生成器,它也可以正常工作@sta@AbhijitMondalAbhi这叫做类型暗示。类/接口的对象是强制的,因此不能提供其他对象类型。安全措施。此外,还可以跳过
query()->