Laravel>嵌套的急切负载与限制

时间:2015-09-18 00:28:25

标签: laravel eager-loading

假设我们有用户,朋友和餐馆。不想深入了解模型和关系设置。

当我作为用户登录时:我怎样才能让所有朋友成为餐厅的“顾客”?

我已经有了这个,而且它已经有效了:

$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);

但这是否可以通过单个查询实现?

1 个答案:

答案 0 :(得分:0)

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

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

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

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