Ларавель красноречиво считает соотношение
Я новичок в laravel и красноречивее, и я не уверен, что это возможно. но у меня есть 2 таблицы с отношением один к одному. Один из них - "местоположения", а один - "пользователи". В одном месте может быть много пользователей.
Итак, если бы я хотел получить все местоположения со всеми пользователями, я бы просто сделал это:
Location::with("users")->get();
Но я также хочу знать, сколько пользователей в каждом месте, я пробовал делать это
Location::with("users")->count("users")->get();
Но это не сработало.
Ответы
Ответ 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