首页 > 解决方案 > 关系“doesntHave”在 Laravel 中不起作用

问题描述

我需要帮助。我有个问题。在这部分代码中,关系“doesntHave”不起作用并返回用户的完整列表

$searchData = $request->searchData;
$users = User::doesntHave('roles')
    ->where('id','like', '%' . $searchData . '%')
    ->orWhere('name', 'like', '%' . $searchData . '%')
    ->orWhere('email', 'like', '%' . $searchData . '%')
    ->limit(8)
    ->get();
       
return response()->json($users);

标签: phplaravelrelationship

解决方案


AND 和 OR 运算符的优先级相同,因此a AND b OR c OR d本质上与(((a AND b) OR C) or D). 在您的情况下,您可能希望a AND (b OR c OR d)实现这一点,您需要:

$searchData = $request->searchData;
$users = User::doesntHave('roles')
    ->where(function ($q) use ($searchData) {
        $q->where('id','like', '%' . $searchData . '%')
            ->orWhere('name', 'like', '%' . $searchData . '%')
            ->orWhere('email', 'like', '%' . $searchData . '%');
    })
    ->limit(8)
    ->get();
       
return response()->json($users);

推荐阅读