Laravel 5.2.29 多对多关系无效
Laravel 5.2.29 Many to Many relationship not working
我正在尝试使用数据透视表 table 实现多对多关系。我的数据透视表 table 的名称是 "post_tag",列名称是 "post_id" 和 "tag_id"。 post 和标签模型 class 如下所示。
class Post extends Model
{
protected $fillable = array(
'title',
'text',
'active',
'user_id'
);
public function user()
{
return $this->belongsTo('App\Post');
}
public function comments()
{
return $this->hasMany('App\Comment');
}
public function tags()
{
return $this->hasMany('App\Post', 'post_id');
}
}
标签class如下:
class Tag extends Model
{
public function posts()
{
return $this->hasMany('App\Post');
}
}
post_tag table 如下所示:
post_id tag_id
1 1
1 2
2 1
我正在使用以下代码尝试 post 的标签:
$user = User::find(1);
foreach ($user->posts as $post) {
foreach ($post->tags as $tag) {
print $tag->title;
print "<br>";
}
print "<br>";
}
但是它抛出一个错误:
Connection.php 第 729 行中的 QueryException:
SQLSTATE[42S22]:未找到列:1054 'where clause' 中的未知列 'posts.post_id'(SQL:select * 来自 posts
,其中 posts
.post_id
= 1 并且 posts
.post_id
不为空)
我想我错过了什么。谁能告诉我一下。
谢谢
您在 Post 模型的 tags()
方法中设置了错误的关系。应该是return $this->belongsToMany('App\Tag');
并且在标签模型的 posts()
方法中,您应该设置 return $this->belongsToMany('App\Post');
更多信息请见laravel docs
我正在尝试使用数据透视表 table 实现多对多关系。我的数据透视表 table 的名称是 "post_tag",列名称是 "post_id" 和 "tag_id"。 post 和标签模型 class 如下所示。
class Post extends Model
{
protected $fillable = array(
'title',
'text',
'active',
'user_id'
);
public function user()
{
return $this->belongsTo('App\Post');
}
public function comments()
{
return $this->hasMany('App\Comment');
}
public function tags()
{
return $this->hasMany('App\Post', 'post_id');
}
}
标签class如下:
class Tag extends Model
{
public function posts()
{
return $this->hasMany('App\Post');
}
}
post_tag table 如下所示:
post_id tag_id 1 1 1 2 2 1
我正在使用以下代码尝试 post 的标签:
$user = User::find(1);
foreach ($user->posts as $post) {
foreach ($post->tags as $tag) {
print $tag->title;
print "<br>";
}
print "<br>";
}
但是它抛出一个错误:
Connection.php 第 729 行中的 QueryException:
SQLSTATE[42S22]:未找到列:1054 'where clause' 中的未知列 'posts.post_id'(SQL:select * 来自 posts
,其中 posts
.post_id
= 1 并且 posts
.post_id
不为空)
我想我错过了什么。谁能告诉我一下。
谢谢
您在 Post 模型的 tags()
方法中设置了错误的关系。应该是return $this->belongsToMany('App\Tag');
并且在标签模型的 posts()
方法中,您应该设置 return $this->belongsToMany('App\Post');
更多信息请见laravel docs