Ларавель красноречиво считает соотношение

Я новичок в 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