Я новичок в laravel и красноречивее, и я не уверен, что это возможно. но у меня есть 2 таблицы с отношением один к одному. Один из них – «местоположения», а один – «пользователи». В одном месте может быть много пользователей.
Поэтому, если бы я хотел получить все местоположения со всеми пользователями, я бы просто сделал это:
Location::with("users")->get();
Но я также хочу знать, сколько пользователей имеет каждое место, я пытался это сделать
Location::with("users")->count("users")->get();
Но это не сработало.
Проблема n + 1, о которой упоминалось, не возникает, если вы используете активную загрузку.
$locations = Location::with('users')->get(); $locations->users()->count();
Это должно привести к трем запросам, независимо от того, сколько у вас пользователей или мест.
Путаница возникает из-за того, что это также работает:
$locations = Location::all(); $locations->users()->count();
Но в этом случае он запрашивает один раз для каждого местоположения.
Дополнительную информацию см. В документах: http://laravel.com/docs/eloquent#eager-loading
Вы должны вызвать метод подсчета в каждой записи местоположения, чтобы подсчитать количество пользователей на каждое место, вот пример:
foreach(Location::get() as $location) // or foreach(Location::with("users")->get() as $location) { echo $location->users()->count(); }
Это должно решить вашу проблему и дать вам количество пользователей в каждом месте. Вы можете добавить проверку в цикле, чтобы игнорировать местоположения с подсчетом пользователей = 0