簡體   English   中英

如何在 laravel 中使用 whereHas

[英]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.

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