我想我不明白when()
的正确用法。
我试着用这种方式来表达:我有一个jsonb
列(称为info
),它有多个属性。我想检查其中一个值是否为“Chemical”,并执行一些查询。否则,执行另一个查询。这是我使用它的方式:
$query->when(
'info->type' === 'Chemical',
function ($query) {
return $query->has('bottles', 0);
},
function ($query) {
return $query->where('info->quantity', '<=', 0);
}
);
第一个函数将是truthy值,第二个函数将是falsey值。然而,它永远不会命中第一个函数。
我做错了什么?你不是这样使用when
的吗?
1条答案
按热度按时间wbgh16ku1#
您是正确的,唯一的错误是
info->type
永远不会等于Chemical
,因为您正在比较字符串。因此,无论您将表达式写为什么,它都必须是与查询无关的内容。
when
作为if
的别名工作,因此不需要像这样中断查询:使用
when
,它将如下所示:按照您的示例,您需要获得
info->type
是什么,假设您能够从另一个器件获得:有关
when
的更多信息,请参阅文档。您可以阅读更多,只需检查
when()
的源代码(Laravel 9)