【问题标题】:Laravel builder conditional clauses that can return more than 1 condition可以返回多个条件的 Laravel builder 条件子句
【发布时间】:2018-09-16 05:29:18
【问题描述】:

只有在收到特定请求时,我才想在查询中添加一些额外的子句

我可以用https://laravel.com/docs/5.6/queries#conditional-clauses做到这一点

    ->when($markeplace_id !=0, function ($query) use ($marketplace_id){
       return $query->join('seller b', 'a.seller_id', '=', 'b.seller_id')
    });

    ->when($markeplace_id !=0, function ($query) use ($marketplace_id){
       return $query->join('marketplaces as c', 'c.marketplace_id', '=', 'b.marketplace_id')
    });
    ->when($markeplace_id !=0, function ($query) use ($marketplace_id){
       return $query->where('c.marketplace_id','=',$marketplace_id)
    });

条件子句仅返回 1 个子句。但是我有 3 个。我应该使用 when 3 次还是我可以将它们捆绑成 1 when ?

    ->join('sellers as b', 'a.seller_id', '=', 'b.seller_id')
    ->join('marketplaces as c', 'c.marketplace_id', '=', 'b.marketplace_id')
    ->where('c.marketplace_id','=',$marketplace_id)

【问题讨论】:

    标签: mysql laravel postgresql


    【解决方案1】:

    试试

    ->when($markeplace_id !=0, function ($query) use ($marketplace_id){
       $query->join('seller b', 'a.seller_id', '=', 'b.seller_id');
       $query->join('marketplaces as c', 'c.marketplace_id', '=', 'b.marketplace_id');
       return $query->where('c.marketplace_id','=',$marketplace_id);
    });
    

    我没有测试过。如果不行请告诉我

    【讨论】:

    • 逻辑上它不会起作用,因为其他的没有返回。
    • 尝试 return $query->join('seller b', 'a.seller_id', '=', 'b.seller_id')->join('marketplaces as c', 'c. market_id', '=', 'b.marketplace_id')->where('c.marketplace_id','=',$marketplace_id);
    • @SNaRe:它确实有效。因为$query 是一个对象,所以return $query; 也可以工作。
    猜你喜欢
    • 2019-11-03
    • 1970-01-01
    • 2017-11-11
    • 2015-09-29
    • 2015-09-23
    • 2018-06-10
    • 2015-07-07
    • 1970-01-01
    相关资源
    最近更新 更多