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();
您可以阅读有关查询关系的更多信息,以及 whereHas
、here。
假设我们有用户、朋友和餐馆。不想深入研究模型和关系设置。
当我作为用户登录时:我怎样才能得到所有 "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();
您可以阅读有关查询关系的更多信息,以及 whereHas
、here。