Laravel> 有限制的嵌套预加载

Laravel > nested eager load with restriction

假设我们有用户、朋友和餐馆。不想深入研究模型和关系设置。

当我作为用户登录时:我怎样才能得到所有 "customers" 餐厅的朋友?

我有这个,它已经在工作了:

$friends = array_dot(Auth::user()->friends()->select('users.id')->get());

$customers = Restaurant::with(['users' => function($query) use($friends) {
    $query->whereIn('users.id', $friends);
}])->find(restaurant_id);

但这甚至可以通过单个查询实现吗?

听起来您想找到与餐厅有关系的所有朋友。如果是这样,您正在寻找 whereHas()。总体思路:

$restaurantId = 1;
$user = Auth::user();

$friendCustomers = $user->friends()->whereHas('restaurant', function ($query) use ($restaurantId) {
    $query->where('id', $restaurant_id);
})->get();

您可以阅读有关查询关系的更多信息,以及 whereHashere