Laravel 5.3约束Eager Loads不起作用

时间:2016-11-25 04:03:26

标签: php laravel laravel-5 laravel-5.3

我在一对一关系中有两个模型UserProfile

我想使用以下代码检索profile.status == TRUE所有用户。

$users = User::with(['profile' => function ($query) {
        $query->where('status', TRUE);
    }])->get();


    dd(count($users)); //50 

我有50个用户,其中只有3个用户status == TRUE。但总是显示 50

3 个答案:

答案 0 :(得分:1)

您正在获得50个用户,因为您正在将条件应用于profiledd($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();