Отношение многие ко многим - оно не отображает элементы - PullRequest
0 голосов
/ 20 ноября 2018

Я хочу иметь отношения многие ко многим.Итак, я создал: Into Game model

public function category(){
      return $this->belongsToMany('App\Category');
  }

Into Category model

public function games(){
          return $this->hasMany('App\Game');
    }

Into controller

$category = Category::where('slug', $slug)->first();
      dd($category->games());
      return view('frontend.game.gamelist')->with('elements', $category->games());

Как правило, я пытаюсь отобразить все игры, относящиеся к определенной категории,Я вижу что-то вроде этого enter image description here

Если я удалю dd (), view не отобразит никаких элементов. Но это не проблема с view.

@foreach($elements as $element)
//...
@endforeach

Почему это не работает?

Ответы [ 4 ]

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

Вам необходимо иметь отношение belongsToMany в вашей модели Category, чтобы иметь отношение многие-многие.Вы можете добиться этого, выполнив:

public function games() 
{
    return $this->belongsToMany('App\Game');
}

Затем в контроллере своей категории вы получите:

$category = Category::with('games')->where('slug', $slug)->get();

return view('frontend.game.gamelist', compact('category');

Затем, по вашему мнению, вы можете получить доступ к списку игр с помощью

@foreach($category->games as $game)
//...
@endforeach
0 голосов
/ 20 ноября 2018

Вы используете ленивые загруженные данные

Laravel eloquent Lazy Vs.Eager Loaded

Обновите свой метод контроллера:

$category = Category::with('games')->where('slug', $slug)->first();
dd($category->games);

return view('frontend.game.gamelist')->with('elements', $category);

Вы должны получить все категории с играми, чтобы вы могли получить эти данные с помощьюзапрос также смотрите их в dd функции.

Если вы только получаете категорию, а затем делаете category->games(), она выполнит другой запрос в вашем представлении.

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

Когда вы делаете:

$category->games();

, вы получаете доступ к самому отношению (полезно для наложения ограничений), а не к элементам отношения.Проверьте этот другой ответ для подробного объяснения.

Попробуйте вместо этого:

$category->games;

OBS

При выполнении много-для-Много отношения, метод belongsToMany должен быть указан в обеих моделях.

Category.php

public function games()
{
      return $this->belongsToMany('App\Game');
}
0 голосов
/ 20 ноября 2018

Вы Category модель также должны иметь belongsToMany в ее games() отношении.

public function games() {
    return $this->belongsToMany('App\Game');
}
...