当我将这个变量传递给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);
2条答案
按热度按时间wtzytmuj1#
传递给闭包callback的第二个参数是“value”。“value”是传递给
when
的第一个参数:因为你传递了一个布尔值作为第一个参数给
when
,$value
,你在回调中得到了true
作为第二个参数。(它必须是true
,否则这个回调不会被执行)如果你想把
$user_id
作为参数传递给回调函数,你必须把它作为第一个参数传递给when
(你正在检查的值)。然后,回调函数的第二个参数将是$user_id
的值。否则,您必须使用
use
结构从父作用域继承$user_id
(如前一个答案所示):PHP.net Manual - Anonymous Functions-示例#3
vawmfj5a2#
浏览:https://www.php.net/manual/en/language.references.pass.php#123995
像这样使用: