Подтвердить что ты не робот

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

Я новичок в laravel и красноречивее, и я не уверен, что это возможно. но у меня есть 2 таблицы с отношением один к одному. Один из них - "местоположения", а один - "пользователи". В одном месте может быть много пользователей.

Итак, если бы я хотел получить все местоположения со всеми пользователями, я бы просто сделал это:

Location::with("users")->get();

Но я также хочу знать, сколько пользователей в каждом месте, я пробовал делать это

Location::with("users")->count("users")->get();

Но это не сработало.

4b9b3361

Ответ 1

Проблема n + 1, о которой упоминалось, не возникает, если вы используете загружаемую загрузку.

$locations = Location::with('users')->get();

$locations->users()->count();

Это должно привести к трем запросам, независимо от того, сколько у вас пользователей или местоположений.

  • запрос подсчета по модели местоположения
  • выберите * из местоположений
  • выберите * от пользователей, где в

Путаница возникает из-за того, что это также работает:

$locations = Location::all();

$locations->users()->count();

Но в этом случае он запрашивает один раз для каждого местоположения.

Подробнее см. в документах: http://laravel.com/docs/eloquent#eager-loading

Ответ 2

Вам нужно вызвать метод подсчета в каждой записи местоположения, чтобы подсчитать количество пользователей для каждого местоположения, вот пример:

foreach(Location::get() as $location) // or foreach(Location::with("users")->get() as $location)
{
  echo $location->users()->count();
}

Это должно решить вашу проблему и дать вам количество пользователей в каждом месте. Вы можете добавить проверку в цикле, чтобы игнорировать местоположения с подсчетом пользователей = 0