[英]how to use whereHas in laravel
我是 laravel 的新手,我需要為數據庫創建一個查詢,
$query = Deal::query();
我想使用 wherehas 運算符。 這是我的代碼。
else if ($group_by == 'precedence') {
if($get_deals_for == 'noprecedence'){
$get_deals_for = 0;
}
$precedenceStatus = $get_deals_for;
$query-> where('precedence', '=', $precedenceStatus);
// \Log::info('The request precedence: '.$precedenceStatus);
}
我也想將此代碼添加到查詢中
if($person) {
$query->whereHas('personnel', function ($subQuery) use ($person) {
$subQuery->where('id', '=', $person);
});
}
所以我需要更改第一個代碼? 如何將第一個代碼轉換為 wherehas? 第一個代碼來自名為 deal 的表,第二部分來自名為 personnel 的 realtionship。 第二部分在代碼的其他地方工作,我只需要修復第一部分並且不明白在使用中寫什么
我嘗試這個並在最后一個錯誤}
else if ($group_by == 'precedence') {
if($get_deals_for == 'noprecedence'){
$get_deals_for = 0;
}
$precedenceStatus = $get_deals_for;
$query-> where('precedence', '=', $precedenceStatus)
-> when ($person, function($query) use($person) {
$query->whereHas('personnel', function ($query) use ($person) {
$query->where('id', '=', $person);
});
})
}
您可以使用一個名為 when( 的方法,這樣您就可以擁有更簡潔的代碼。第一個參數 if true 將執行您的條件語句。
https://laravel.com/docs/9.x/queries#conditional-clauses
$result = $query
->where('precedence', '=', $precedenceStatus)
->when($person, function ($query) use ($person) {
$query->whereHas('personnel', fn ($q) => $q->where('id', '=', $person));
})
->get();
您還應該能夠在使用 when( 之前清理您的優先級代碼,以使整個事情更清晰一些。
在 laravel 中查詢 DB 非常簡單,您只需要查詢您想要執行的查詢,然后您只需將其替換為 laravel 助手。或者,如果您無法理解要使用哪個 function,則可以編寫原始查詢。 使用DB::raw('write your sql query')
。
現在大部分時間 whereHad 用於過濾特定 model 的數據。更喜歡此鏈接,[Laravel 官方文檔查詢][1] 就像你有 1 對 m 關系船這樣你就可以從一個部分中檢索許多 object 或許多object的一部分。就像我想過濾用戶所做的許多評論,那么我會這樣。
$comments = Comment::whereHas('user', function (Builder $query) {
$query->where('content', 'like', 'title%');
})->獲取();
$comments = Here will be the model which you want to retrive::whereHas('relationship name', function (Builder $query) { $query->where('content', 'like', 'title%'); } )->獲取();
你也可以把 whereHas 寫在 whereHas 里面。 [1]: https://laravel.com/docs/9.x/eloquent-relationships#querying-relationship-existence
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.