Laravel 关系不在
Laravel Relation where not in
我关注table
用户
id | username | password
1 | scott | 98746
2 | mark | 6542
3 | michel | 6589
user_detail
id | user_id | status | mobile_number
1 | 1 | pending | 987643210
2 | 2 | review | 3216547901
现在我想检索那些用户在 user_detail
table 中没有记录的记录,其中 status=pending
我试过使用最新版本的关系
$user=User::with('userDetail')
->whereDoesntHave('userDetail',function ($query){
$query->where('status','pending');
})->get();
我在 laravel.Since 中寻找没有关系的相同逻辑,我们使用的是不支持的旧 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());
干杯!
我关注table
用户
id | username | password
1 | scott | 98746
2 | mark | 6542
3 | michel | 6589
user_detail
id | user_id | status | mobile_number
1 | 1 | pending | 987643210
2 | 2 | review | 3216547901
现在我想检索那些用户在 user_detail
table 中没有记录的记录,其中 status=pending
我试过使用最新版本的关系
$user=User::with('userDetail')
->whereDoesntHave('userDetail',function ($query){
$query->where('status','pending');
})->get();
我在 laravel.Since 中寻找没有关系的相同逻辑,我们使用的是不支持的旧 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());
干杯!