为了账号安全,请及时绑定邮箱和手机立即绑定

如何用 eloquent 编写查询,就像 SQL 中的括号一样?

如何用 eloquent 编写查询,就像 SQL 中的括号一样?

PHP
潇潇雨雨 2022-01-08 20:41:38
我有一个查询,其中所有参数都是可选的 我想在以下情况下选择行:“选择所有具有 marketplace_id 或 account_id 并具有标题的产品”。换一种说法 select * from produts where (marketplace_id in (...) or account_id in (...)) and title ilike "blah".那是我能到的最远的地方。   $query = Product::query();    if($parametros_pesquisa['marketplaces'] !== null )    {       $query->whereIn('marketplace_id', $search_parameters['marketplaces']);    }if($parametros_pesquisa['contas'] !== null){                 $query->orWhereIn('conta_id', $search_parameters['account']);    } if($search_parameters['titulo'] !== null){        $query->where("titulo", 'ilike', '%' . $search_parameters['titulo'] . '%');   }在这里,$search_parameters['marketplaces']and$search_parameters['account']将是一个 id 数组,[1, 2, 3]。我检查用户是否指定了搜索条件并将其动态包含在查询中。似乎查询正在执行,就像查询中的括号不存在一样。我怎样才能达到我想要的?
查看完整描述

2 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

您可以将回调传递where给 group or。


//quick example of Parameter Grouping:


$query = Product::query();


$query->where(function ($query) use ($search_parameters){

     $query->whereIn('marketplace_id', $search_parameters['marketplaces'])->orWhereIn('conta_id', $search_parameters['account']);

})->where("titulo", 'ilike', '%' . $search_parameters['titulo'] . '%');

请阅读 DB Query Builder Laravel: DOCS


查看完整回答
反对 回复 2022-01-08
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

答案指明了方向。我能够查看是否传递了参数并动态添加条件。


 $query->where(function ($query) use ($parametros_pesquisa){


            if($parametros_pesquisa['marketplaces'] !== null && $parametros_pesquisa['accounts'] !== null){


                $query->whereIn('marketplace_id', json_decode( $parametros_pesquisa['marketplaces']))->orWhereIn('conta_id', json_decode( $parametros_pesquisa['accounts']));


            }elseif($parametros_pesquisa['marketplaces'] !== null){


                $query->whereIn('marketplace_id', json_decode( $parametros_pesquisa['marketplaces']));


            }elseif($parametros_pesquisa['accounts']  !== null){


                $query->whereIn('conta_id', json_decode( $parametros_pesquisa['accounts']));


            }


       });


查看完整回答
反对 回复 2022-01-08
  • 2 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信