我目前正在学习Laravel,我有一个问题,我似乎无法找到解决方案。我在两个表之间有多对多关系,总是不返回任何内容。让我告诉你基本设置:
我的帖子型号:
// App\Post.php
protected $fillable = [
'name',
'description'
'videopath'
];
public function Tags()
{
return $this->belongsToMany('App\Tag');
}
public function Cats()
{
return $this->belongsToMany('App\Cat');
}
我的代码模型:
// App\Tag.php
protected $fillable = [
'name',
'description'
];
public function exercises()
{
return $this->belongsToMany('App\Exercise');
}
我的帖子控制器:
// PostController.php
public function show($id)
{
$post = Post::find($id);
return view('posts', ['post'=>$post];
}
观点:
// posts.blade.php
@foreach($post->tags() as $tag)
//do stuff
@endforeach
中间表名为post_tag
,包含post_id
和tag_id
列。起初它按预期返回结果但过了一段时间后我的所有帖子都没有返回任何标签了。猫模型看起来类似于标签模型。有人有想法吗?
答案 0 :(得分:0)
检查标签功能的名称。在您的视图中,您调用“标记”而不是“标记”。
您是否在数据库中创建了中间表?如果是这样,请检查Laravel用于查找它的命名约定(字母顺序):在您的情况下,它应该是tag_post
。如果没有,customize the name of the table when defining the relationship.
多对多
多对多关系比hasOne稍微复杂,并且有很多关系。这样一个例子 relationship是具有多个角色的用户,角色也是 由其他用户共享。例如,许多用户可能具有该角色 “管理”。要定义此关系,需要三个数据库表 需要:
users
,roles
和role_user
。role_user
表来自相关模型名称的字母顺序,包含user_id
和role_id
列。
答案 1 :(得分:0)
结束你的观点:
@foreach($post->tags() as $tag)
//do stuff
@endforeach
$post->tags()
将返回关系而不是实际的集合。您需要$post->tags
代替$post->tags()->get()
。