我该如何在Eloquent中实现呢?

select * from product where name like '%value%' and (product_type = product_type_param or product_type_param = 0);


如果提供的product_type_param值为0,则当然会考虑名称也匹配的情况,从而选择所有类型的产品。

我当前的代码:

$result = Product::where( [  ['name', 'like', '%' .
$searchAttributes['name'] . '%'],
    ['product_type', '=', $searchAttributes['product_type']]]
     )->get();


这个想法将是这样的(请以示例为例,它仅显示了我的意图):

 ['product_type', '=', $searchAttributes['product_type']] or [$searchAttributes['product_type'] == 0]]


我应该执行原始查询吗?

最佳答案

您可以使用闭包函数来限定查询范围

Product::where('name', 'like', '%' . $searchAttributes['name'] . '%')
        ->where(function($q) use ($searchAttributes) {
             $q->where('product_type', $searchAttributes['product_type'])
               ->orWhere('product_type_param', 0);
        })->get();

关于php - Eloquent 如何在多个“何处”中使用“或”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52153697/

10-13 08:56