我在一对一关系中有两个模型User
和Profile
。
我想使用以下代码检索profile.status == TRUE
所有用户。
$users = User::with(['profile' => function ($query) {
$query->where('status', TRUE);
}])->get();
dd(count($users)); //50
我有50个用户,其中只有3个用户status == TRUE
。但总是显示 50 。
答案 0 :(得分:1)
您正在获得50个用户,因为您正在将条件应用于profile
。 dd($user->profile)
您只会获得状态为true的个人资料的记录。
使用whereHas()
:
$users = User::whereHas('profile', function ($query) {
$query->where('status', TRUE);
})->get();
dd(count($users));
答案 1 :(得分:0)
如果您想使其与单个查询一起使用,您可以使用像
这样的查询构建器join
\DB::table('users')->join('profile', function ($join){
$join->on('users.id', '=', 'profile.user_id')->where('profile.status', '=',TRUE);
})->get();
答案 2 :(得分:0)
您说您遇到了N + 1问题,因此您需要同时使用whereHas()
和with()
来获取用户配置文件并解决N + 1问题:
$users = User::whereHas('profile', function ($query) {
$query->where('status', TRUE);
})
->with('profile')
->get();