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