Невозможно использовать отношение hasMany для цикла в представлении (Laravel) - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь закодировать приложение, в котором есть несколько «Местоположений», которые пользователи могут добавлять в избранное. У меня есть модель для 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'));

}

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

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

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

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

1 Ответ

0 голосов
/ 10 ноября 2018

Попробуйте {{ $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.

...