Я пытаюсь закодировать приложение, в котором есть несколько «Местоположений», которые пользователи могут добавлять в избранное. У меня есть модель для 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();
Как мне преодолеть проблему с «массивом» в представлении? заранее спасибо
Пытаться {{ $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
петля.
Других решений пока нет …