簡體   English   中英

Laravel 不存在的關系

[英]Laravel Relation where not in

我有下表

用戶

id | username | password

1 | scott | 98746
2 | mark | 6542
3 | michel | 6589

用戶詳細信息

id | user_id | status | mobile_number 

1 | 1 | pending | 987643210

2 | 2 | review | 3216547901

現在我想檢索那些用戶在user_detail表中沒有記錄的記錄,其中status=pending

我嘗試在最新版本中使用關系

$user=User::with('userDetail')

        ->whereDoesntHave('userDetail',function ($query){

             $query->where('status','pending');
        })->get();

我在 laravel 中尋找沒有關系的相同邏輯。因為我們使用的是不支持的舊 laravel 版本。

我不知道你所說的沒有關系是什么意思,但如果你必須用普通的 SQL 來做,查詢將如下所示:

$qry = "SELECT * FROM users WHERE id not in (SELECT u.id FROM users u INNER JOIN user_details d ON (u.id = d.user_id AND d.status = 'pending'));"

然后你可以通過調用來運行查詢:

$results = DB::select($qry);

PS:由於我無法在舊文檔中找到它,因此DB::select()可能需要第二個參數。 如果是這種情況,只需將null作為第二個參數傳遞。

編輯:我不確定這是否可行,並且由於它是舊版本的,我無法對其進行測試,但類似的東西應該可以工作:

$rest = User::whereNotIn('id', function($q){
    $q->select('user_id')->from('user_detail')->where('status','pending');
});

我相信您可以通過使用左連接來做到這一點,如下所示:

$rest = DB::table('users')
        ->leftJoin('userDetail','users.id','=','userDetail.user_id')
        ->whereNull('userDetail.id')
        ->orWhere('userDetail.status','=','pending')
        ->get();

如果你需要用戶的 eloquent 集合,你可以像這樣使用hydrate方法:

$rest = User::hydrate(DB::table('users')
        ->leftJoin('userDetail','users.id','=','userDetail.user_id')
        ->whereNull('userDetail.id')
        ->orWhere('userDetail.status','=','pending')
        ->select('users.*')
        ->get()->toArray());

干杯!

暫無
暫無

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

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