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

我有一个查询,其中所有参数都是可选的 我想在以下情况下选择行:“选择所有具有 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]。我检查用户是否指定了搜索条件并将其动态包含在查询中。似乎查询正在执行,就像查询中的括号不存在一样。我怎样才能达到我想要的?


潇潇雨雨
浏览 120回答 2
2回答

qq_笑_17

您可以将回调传递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

qq_遁去的一_1

答案指明了方向。我能够查看是否传递了参数并动态添加条件。 $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']));            }       });
打开App,查看更多内容
随时随地看视频慕课网APP