2016-12-29 21 views
1

A User有许多Phone s。我想从active用户那里获得所有手机。我可以这样做:用laravel获取多个对象的关系

$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. 

但我不知道它的更优雅或laravel十岁上下的方式。这种情况是否有内置的魔术功能?我可以从活动用户获取所有电话而无需编写循环并插入数组中?

回答

3

您应该使用whereHas()方法:

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

你是太快。 :p –

+0

你需要调用get(); –

+1

谢谢! (我可以在几分钟内接受你的答案) –

1

您还可以使用whereExists,如果你不使用从用户表中的数据,可以更高效:

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