使用laravel获取多个对象的关系

时间:2016-12-29 15:26:39

标签: php laravel laravel-5 eloquent

User有很多Phone个。我想从active用户那里获得所有手机。我能做到:

$phones = [];
$users = User::with('phones')->where('active', 1)->get();
foreach($users as $user) {
    $phones = array_merge($phones, $user->phones->toArray());
}
dd($phones); // <- Here are all the phones.

但我不确定它是更优雅或更好的方式。这种情况有内置的魔法功能吗?我是否可以从活动用户那里获得所有电话而无需编写循环并插入数组?

2 个答案:

答案 0 :(得分:3)

您应该使用whereHas()方法:

$phones = Phone::whereHas('user', function($q) {
    $q->where('active', 1);
})->get();

答案 1 :(得分:1)

您还可以使用whereExists,如果您不使用users表中的数据,这会更有效:

Phone::whereExists(function($query) {
    $query->select(\DB::raw('NULL'))
          ->from('users')
          ->whereRaw('users.id = phones.user_id AND users.active = 1')
})->get();