将条件参数传递给 laravel 中的 Eager Loading 以错误结束

Passing conditional param to Eager Loading in larave ends with error

我的代码如下:

   return User::whereHas('roles', function ($role, $query) {
            return $role;
            $query->whereId($role);
        })->get();

我正在尝试的是将角色 ID 传递给查询构建器。

最终出现以下错误:

Symfony\Component\Debug\Exception\FatalThrowableError
Too few arguments to function App\Http\Controllers\UserController::App\Http\Controllers\{closure}(), 1 passed in /Users/x/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php on line 962 and exactly 2 expected 

我想这就是你想要的:

闭包是一种在其自身环境中求值的函数,它具有一个或多个绑定变量,可以在调用该函数时访问这些变量。

use() 关键字让您可以从函数环境外部、函数内部导入变量。

return User::whereHas('roles', function ($query) use ($role) {
    return $query->whereId($role);
})->get();