如何将请求传递给 Laravel Eloquent ::with 函数?

How to pass request into a Laravel Eloquent ::with function?

我的控制器中有这个功能:

public function search(Request $request) {
    return Product::with([
        'producer' => function($producer) {
            dd($request);
            if ( isset($request->producer_id) ) {
                $producer->where(['id','=',$request->producer_id]);
            }
        }
    ]);
}

现在 dd()$request 未定义,但如果我在 return 之前捕捉到它,它就会正确显示。

如何将 $request 变量传递给 ::with 的函数?

要使用 request,您必须在 laravel

中使用 use 关键字
public function search(Request $request) {
return Product::with([
    'producer' => function($producer) use($request) {
                                      ^^^
        dd($request);
        if ( isset($request->producer_id) ) {
            $producer->where(['id','=',$request->producer_id]);
        }
    }
]);
}

在PHP中,如果要将变量传递给内联函数,则需要将use标识符与所需的变量一起添加。示例:

$var = 1.2;

$fn = function ($param1, $param2) use ($var) {
    return ($param1 + $param2) * $var;
};

echo $fn(2, 4); // prints 7.2