Невозможно использовать отношение hasMany для цикла в представлении (Laravel)

Я пытаюсь закодировать приложение, в котором есть несколько «Местоположений», которые пользователи могут добавлять в избранное. У меня есть модель для Locations, модель для Избранного и таблица базы данных, где я регистрирую пары user_id и location_id, чтобы указать любимые местоположения пользователя.

В моей модели Location я определил следующие отношения hasMany:

public function favorites(){
return $this->hasMany(Favorite::class);
}

Я также определил обратные отношения в избранной модели следующим образом:

public function location(){
return $this->belongsTo(Location::class);
}

Затем в представлении я пытаюсь получить список всех местоположений и отметить те, которые пользователь отметил как избранные. Для этого я перебираю все локации и пытаюсь подсчитать, сколько фаворитов у локации. Это должно быть либо 1, либо 0, поскольку строка комбинации user_id / location_id существует только в том случае, если у пользователя определенное местоположение как hi favourite.

Вот соответствующая часть кода (я передаю список мест для просмотра):

@foreach ($Locations_List as $Location)
{{ $Location->favorites()->get()->count }}
@endforeach

Вот как я передаю $ Locations_List:

  public function Create_SearchResults(){

$Locations_List = Location::select('id', 'Name', 'Category', 'Logo', 'Status', 'Address_Number', 'Address_Street', 'Address_City', 'Updated_At')
->where('Status', '>=', 500)
->get();

return view('Location_Search/Index', compact('Locations_List'));

}

Однако, когда я пытаюсь описать вышеизложенное, я получаю «Свойство [количество] не существует в этом экземпляре коллекции».

Я попытался сделать что-то похожее на выше в tinker, и это работает. Тем не менее, мне пришлось разрешить часть «массива» следующим образом:

$loc = App\Location::find(2);
$loc->favorites()->get()->count();

Как мне преодолеть проблему с «массивом» в представлении? заранее спасибо

0

Решение

Пытаться {{ $Location->favorites->count() }} внутри foreach петля.

Кроме того, вы можете загружать счетчики в контроллере, добавив

->withCount('favorites') при инициализации $Locations_List:

$Locations_List = Location::select('id', 'Name', 'Category', 'Logo', 'Status', 'Address_Number', 'Address_Street', 'Address_City', 'Updated_At')
->withCount('favorites')
->where('Status', '>=', 500)
->get();

В этом случае вы можете просто поставить $Location->favorites_count в foreach петля.

-1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector