2013-02-20 88 views
2

我發現我經常需要根據id以外的條件選擇一個字段。處理Laravel數據庫查詢中的空值?

因此,$user = User::where('last_login', $lastLogin)->where('last_warning', $lastWarning)->get();完美。

這是直到你設置允許空位的地方之一(讓我們來做last_login)。

也就是說,它可以有一個值或爲null。

這意味着你需要使用兩個功能where()whereNull()之一,要做到這一點,你需要打破鏈,因此它成爲

$user = User::where('last_warning', $lastWarning); 

is_null($lastLogin) ? $user->whereNull('last_login') : $user->where('last_login', $lastLogin); 

$user = $user->get(); 

我想知道如果where有辦法解決這個問題?因爲目前如果你通過null到你得到的where column = null這是行不通的!

回答

4

兩個選項:

選項1:

if (is_null($lastLogin)) 
{ 
    $user = User::whereNull('last_login')->where('last_warning', $lastWarning)->get(); 
} 
else 
{ 
    $user = User::where('last_login', $lastLogin)->where('last_warning', $lastWarning)->get(); 
} 

選項2:

$user = User::where('last_login', (is_null($lastLogin) ? 'IS' : '=') ,$lastLogin)->where('last_warning', $lastWarning)->get(); 

選擇二使得查詢 'where last_login = x'或' where last_login IS null

+2

有沒有螞蟻的理由,如果沒有任何邏輯來自動做到這一點,如果通過空? – Hailwood 2013-02-20 22:35:12

+0

對不起 - 你必須像泰勒那樣。將它作爲github上的問題/請求發佈吧... – Laurence 2013-02-21 00:17:00

+1

是的,可能會分叉,創建補丁程序,然後用拉取請求提交請求。 – Hailwood 2013-02-21 00:22:01

0

您可以使用DB ::生(),以及:

User::where('last_login', 'IS', DB::raw('null'))->where_last_warning($lastWarning)->get(); 
3

你可以試試這個:

User::where(function($query) use ($lastlogin) 
     { 
      if(is_null($lastLogin)) 
      { 
       $query->whereNull('last_login'); 
      } 
      else 
      { 
       $query->where('last_login', '=', $lastLogin); 
      } 
     })->get(); 

它長的查詢處理一個以上的參數時,是一個很好的解決方案。

1

從Laravel 5.3開始,您現在可以用->where('column', null)自動生成WHERE column IS NULL

如果使用變量,請確保它們具有嚴格的PHP null值。