多对多关系-它不显示元素

时间:2018-11-20 13:49:12

标签: laravel many-to-many relationship

我想建立多对多关系。所以我创建了: 进入游戏模型

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

进入类别模型

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

进入控制器

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

通常,我尝试显示所有属于特定类别的游戏。我看到这样的东西 enter image description here

如果我删除dd(),视图将不会显示任何元素。但这对视图没有问题。

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

为什么不起作用?

4 个答案:

答案 0 :(得分:0)

您的Category模型还需要在其belongsToMany关系中具有games()

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

答案 1 :(得分:0)

您正在使用延迟加载的数据

Laravel eloquent Lazy Vs. Eager Loaded

更新您的控制器方法:

<span *ngFor="let item of record.referrerItemList; let i=index; let isLast=last">
    <span *ngIf="i <= 3">{{item}}</span><span class="list-format" *ngIf="!isLast && i < 3">&#44;&nbsp;</span>
    <span *ngIf="(i > 3) && (i < 5)" class="hellip-format">&hellip;</span>
</span>

您必须获取游戏的所有类别,以便可以通过查询获取这些数据,并在$category = Category::with('games')->where('slug', $slug)->first(); dd($category->games); return view('frontend.game.gamelist')->with('elements', $category); 函数中查看它们。

如果仅获取类别然后执行dd,它将在您的视图中执行另一个查询。

答案 2 :(得分:0)

当您这样做:

$category->games();

您正在访问关系本身(用于附加约束),而不是关系的元素。检查this other answer以获得详细说明。

尝试以下方法:

$category->games;

OBS

建立多对多关系时,在两个模型中都需要指定belongsToMany方法。

Category.php

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

答案 3 :(得分:0)

您还需要在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