簡體   English   中英

使用 Laravel 進行復雜的 eloquent 嵌套關系查詢

[英]Complex eloquent nested relationship queries with Laravel

所以我在我的 laravel 應用程序中建立了一個雄辯的查詢。 該查詢有許多不同的關系被引入其中,並設置如下:

CourseEnrollment::whereIn('domain_id', $domain_ids)
                        ->whereHas('member', function($query)use ($filterUser){
                            if($filterUser === 'true'){
                                $query->where('email', 'NOT LIKE', '%@gmail.com%');
                                $query->where('email', 'NOT LIKE', '%@yahoo.com%');
                                $query->where('email', 'NOT LIKE', '%@boss.com%');
                                $query->where('email', 'NOT LIKE', '%@test.com%');
                            }
                            $query->where('is_mentor', 1)->orWhere(function ($q){
                                $q->where('privileges', '!=', 0);
                            });
                        })   
                        ->get();

如果您查看代碼 $query->where(is_mentor, 1)->orWhere... 的行,您可以看到我嘗試創建一個使用嵌套在兩個不同點的鍵的 orWhere 情況。 權限實際上不是在成員關系上,而是在我正在查詢的主 CourseEnrollment 表上的一個鍵。 我需要能夠說如果enrollment.privileges 不等於0 或者如果member.is_mentor 鍵等於1 然后獲取該注冊,否則不要獲取該注冊。 正如我現在擁有的那樣,我認為它正在工作,但我遇到的問題是,當我將它與上面過濾掉電子郵件的邏輯結合起來時,orWhere 會覆蓋該邏輯。 例如,我正在過濾掉所有的電子郵件,這條路線本應該什么都不返回,但是能夠通過滿足 orWhere 語句的兩個條件的注冊。 有沒有更好的方法來比較 laravel 中不同的嵌套鍵?

我建議在使用 orWhere 之前將查詢與 where 分組,以防止不過濾以前的 where,就像添加括號括住內部條件一樣。

CourseEnrollment::whereIn('domain_id', $domain_ids)
    ->whereHas('member', function ($query) use ($filterUser) {
        if ($filterUser === 'true') {
            $query->where('email', 'NOT LIKE', '%@gmail.com%');
            $query->where('email', 'NOT LIKE', '%@yahoo.com%');
            $query->where('email', 'NOT LIKE', '%@boss.com%');
            $query->where('email', 'NOT LIKE', '%@test.com%');
        }

        $query
            ->where(function ($sub) {
                $sub->where('is_mentor', 1);
                $sub->orWhere('privileges', '!=', 0);
            });
    })
    ->get();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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