亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Laravel:如何在 where 子句中混合“and”和“or”條件?

Laravel:如何在 where 子句中混合“and”和“or”條件?

PHP
米脂 2023-09-08 10:15:13
我搜索并發現了類似的帖子,但沒有一個與我的情況相同。似乎 Laravel 文檔沒有顯示像我這樣的情況,盡管我的情況在數據庫查詢的 where 子句中很常見。我的例子中的 where 子句如下所示,我無法讓它與 where() 和 orwhere() 方法以及人們在其他帖子中建議的技巧一起使用。任何信息表示贊賞。謝謝。where a = 1 and b = 2 and (c = 3 or c = 4) and (d = 5 or d = 6)另一層復雜性是,我可以將所有“and”條件合并到一個數組中,并將其輸入一個 where() 方法,但我必須將“or”條件分組到單獨的數組中,以及在代碼中動態收集多少組,比如下面的。$and = [['a', '=', 1], ['b', '=', 2], ...];if($cond1) $or['or1'] = [['c', '=', 3], ['c', '=', 4], ...];if($cond2) $or['or2'] = [['d', '=', 5], ['d', '=', 6], ...];if($cond3) $or['or3'] = [['e', '=', 7], ['e', '=', 8], ...];...PS:我要感謝所有回復(帖子或評論)的人。我認真考慮了所有建議并嘗試了一些可以應用于我的案例的建議,但不幸的是它們都不起作用。所以我的解決方案只是編譯一個原始的 where 子句,如上面給出的示例所示,并使用 whereRaw() 方法。這樣做很簡單,而且效果很好。
查看完整描述

4 回答

?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

你可以這樣做


Model::where('a', '1')

    ->where('b', '2')

    ->where(function ($q) {

         $q->where('c', '3')->orWhere('c', '4');

    })

    ->where(function ($q) {

         $q->where('d', '5')->orWhere('d', '5');

    })->get();


查看完整回答
反對 回復 2023-09-08
?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

如果我收到您的問題,那么這張收據適合您:


$result = DB::table('table')

   ->where('a', 1)

   ->where('b', 2)

   ->where(function($query) {

      $query->where('c', 3)

            ->orWhere('c', 4)

   })

   ->where(function($query) {

      $query->where('d', 5)

            ->orWhere('d', 6)

   ->get();


查看完整回答
反對 回復 2023-09-08
?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

像這樣的事情應該可以解決問題:


Model::where([

    ['a', '=', 1],

    ['b', '=', 2],

    [['c', '=', 3], 'OR', ['c', '=', 4]],

    [['d', '=', 5], 'OR', ['d', '=', 6]]

]);


查看完整回答
反對 回復 2023-09-08
?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

既然你已經改進了你的問題。以下是實現這一目標的方法。


沒有測試過。像這樣的事情怎么樣?


$ands = [['a', '=', 1], ['b', '=', 2], ...];


$query = Model::query();

foreach($and as $and) {

    $query = $query->where($and);

}


if($cond1) $ors['c'] = [3, 4, ...];

if($cond2) $ors['d'] = [5, 6, ...];

if($cond3) $ors['e'] = [7, 8, ...];

...


foreach($ors as $key => $or) {

    $query = $query->where(function($q) use ($key, $or) {

        $q->whereIn($key,$or);

     });

}


$query->get();


查看完整回答
反對 回復 2023-09-08
  • 4 回答
  • 0 關注
  • 337 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號