she*_* me -2 php laravel eloquent
当我将此变量传递给 Laravel Eloquent 的when()方法时,我在闭包内的参数有一个奇怪的值。在闭包内,因为$user_id
我得到true
而不是2
. 原因可能是什么?
$user_id = 2;
$orders = Order::with('user')
->when(!empty($user_id), function ($query, $user_id) {
dd($user_id); // <-------- HERE I get TRUE instead of "2" as value.
$query->where('user_id', $user_id);
})
->when(($filter == 'paymentreceived'), function ($query) {
$query->paymentConfirmationReceived();
})
->orderBy('id', 'desc')
->paginate(50);
Run Code Online (Sandbox Code Playgroud)
传递给闭包回调的第二个参数是“值”。“值”是您传递给的第一个参数when
:
public function when($value = null, callable $callback = null, callable $default = null)
{
...
return $callback($this, $value) ?? $this;
...
}
Run Code Online (Sandbox Code Playgroud)
由于您将布尔值作为第一个参数传递给when
, $value
,因此您将true
作为第二个参数进入回调。(必须如此,true
否则该回调将不会被执行)
$user_id
如果您希望将其作为参数传递给回调,when
则必须将其作为第一个参数传递给(您正在检查的值)。然后,回调的第二个参数将是 的值$user_id
。
...->when($user_id, function ($builder, $user_id) { ... })
Run Code Online (Sandbox Code Playgroud)
否则,您必须$user_id
使用构造从父作用域继承use
(如前面的答案所示):
...->when(..., function ($builder) use ($user_id) { ... })
Run Code Online (Sandbox Code Playgroud)
PHP.net 手册 - 匿名函数-示例 #3