[英]Laravel/SQL: return rows where column Equals NOT 'something" and NULL
LARAVEL 5.4(但可能是更一般的SQL問題)
你好! 我有一個結構表:
假設它是我的模型“表”。
我想要一個查詢:
使用(接收)變量:
數組['id','string',整數]的$ id
其中字符串是“ <”或“>”
$ status_not_bad = bool;
(如果為true-包括'status'!=='bad'AND'status'為NULL的所有行);
例如,我們得到:
$id = ['id', '>', 0];
$status_not_bad = true;
Table::thisquery() ... ->get();
“獲取狀態不差且id> 0的行”返回行1和3。
但是如果我們給出:
$id = ['id', '<', 3];
$status_not_bad = true;
Table::thisquery() ... ->get();
“獲取狀態不差且id <3的行”返回第1行
(應該是使用這些變量返回結果的同一查詢)。
只需鏈接您的->where()
子句即可。 也許還考慮將它們包裝起來,以防止與任何其他沖突:
$results = Table::where("id", ">" 0)
->orWhere("number", ">", 2)
->orWhereNull("status")
->get();
或包裝:
$results = Table::where(function($query){
$query->where("id", ">" 0)
->orWhere("number", ">", 2)
->orWhereNull("status");
})->get();
如果要查看實際執行的查詢是什么,請將->get()
替換為->toSql()
,然后使用dd($result);
:
$results = Table::where(...)->toSql();
dd($results);
編輯:由於多個條件,聽起來我們需要多個包裝查詢:
$results = Table::where(function($query){
$query->where("status", "!=", "bad")
->where("id", "<", 3); -- "status is not bad and id < 3"
})->orWhere(function($query){
$query->where("status", "!=", "bad")
->where("id", ">", 0); -- "status is not bad and id > 0"
})->get();
如您的注釋中所述,這應該處理成對的情況。
我以前從未使用過laravel,因此我的語法可能會關閉,但是我知道您想為此使用MySQL的ifNull函數:
Table::where([['id', '>', 0], ['number', '>', 2])->whereRaw("IfNull(status, 'blah') <> 'bad'")->get();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.