我想建立多对多关系。所以我创建了: 进入游戏模型
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());
如果我删除dd(),视图将不会显示任何元素。但这对视图没有问题。
@foreach($elements as $element)
//...
@endforeach
为什么不起作用?
答案 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">, </span>
<span *ngIf="(i > 3) && (i < 5)" class="hellip-format">…</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;
建立多对多关系时,在两个模型中都需要指定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