我有一個簡單的結果表,如下所示 -
id, home_team_id, away_team_id, home_score, away_score, media
1 511 322 4 0 'a4vw'
2 232 511 2 2 'bf34',
3 111 511 2 3 NULL
我能夠獲得“team_id”值為home_team_idOR away_team_id= 的所有行511,但我還需要檢查以確保該media列是NOT NULL
原始 SQL 查詢會像這樣
SELECT * FROM results where (home_team_id = 310718 OR away_team_id = 310718) and media is not null;
但是,我正在嘗試盡可能多地使用 Laravel Eloquent 方法,因為我正在學習這一點,因此可以使用如下一種方法(效果很好)但我試圖DB::raw在我的方法中不使用任何方法
DB::table("results")
->where(DB::raw("(home_team_id = 511 or away_team_id = 511)"))
->whereNotNull("media")
->get();
我將如何修改我的結果模型中的以下內容以執行與上述查詢相同的查詢,因為這會回傳所有結果我只期望 2 個結果,因為媒體列有一個 NULL 條目
return Result::where('home_team_id', '=', $clubId)
->orWhere('away_team_id', '=', $clubId)
->whereNotNull('media')
->get();
uj5u.com熱心網友回復:
你能試試這個嗎?
return Result::where(function($query) use ($clubId) {
$query->where('home_team_id', $clubId)
->orWhere('away_team_id', $clubId);
})->whereNotNull('media')->get();
uj5u.com熱心網友回復:
您查詢中的問題是orWhere在錯誤的位置使用了條件。由于您的查詢中有兩個主要條件,一個是
'team_id' 值是
home_team_idORaway_team_id
而第二個條件是
media列不為空
因此,您必須將兩個條件分解為兩個單獨的條件陳述句。
試試下面的查詢
return Result::where(function($query) use ($clubId) {
$query->where('home_team_id', '=', $clubId)
->orWhere('away_team_id', '=', $clubId);
})
->whereNotNull('media')
->get();
uj5u.com熱心網友回復:
這是初學者常見的錯誤。
您應該始終對
orWhere呼叫進行分組,以避免在應用全域作用域時出現意外行為。
https://laravel.com/docs/8.x/queries#logical-grouping
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/334337.html
