簡體   English   中英

帶有嵌套 Where 子句的 Eloquent

[英]Eloquent With Nested Where Clauses

我很好奇是否有辦法使用 Eloquent 的查詢構建器來嵌套 where 子句,或者我是否應該只運行原始數據庫查詢。

這是原始查詢:

SELECT * FROM `inventory` WHERE (`sold_date` > '2020-12-31' OR `sold_date` IS NULL) AND (`removed_date` > '2020-12-31' OR `removed_date` IS NULL) AND `category` <> 1 AND `purchased_date` <= '2020-12-31'

是的,您可以將帶有條件的數組傳遞給 Eloquent 的where()並有多個where()

有關如何構建查詢的信息,請參閱此答案(包括評論): https://stackoverflow.com/a/27522556/4517964

你可以試試這個

    Inventory ::where(function($query) use ($d1){
                $query->where('solid_date','=',$d1)
               ->orWhereNull('solid_date');
           })->where(function($query2) use ($da1){
                $query2->where('removed_date','=',$da1)
               ->orWhereNull('removed_date');
          })->where(function($query3) use (){
                $query2->where('category','<>',1)
               ->where('purchased_date','=','2020-12-31');
          }}->get();

我更喜歡在少數函數中使用參數可能是您需要它,否則您可以像我在上一個 function 中那樣對其進行硬編碼

在 Laravel Eloquent 中,您可以使用以下查詢:

$inventory = Inventory::where(function($query) {
    $query->where('sold_date', '>', '2020-12-31')->orWhereNull('sold_date');
})->where(function($query) {
    $query->where('removed_date', '>', '2020-12-31')->orWhereNull('removed_date');
})->where('category', '<>', 1)->where('purchased_date', '<=', '2020-12-31')
->order('id', 'DESC')
->get();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM