我正在尝试使用数据透视表实现多对多的关系。我的数据透视表的名称是“post_tag”,列名是“post_id”和“tag_id”。 post和tag模型类如下所示。
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 Tag extends Model
{
public function posts()
{
return $this->hasMany('App\Post');
}
}
post_tag表格如下所示:
post_id tag_id 1 1 1 2 2 1
我正在使用以下代码尝试帖子的标签:
$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子句'中的未知列'posts.post_id'(SQL:select * from posts
其中posts
。post_id
= 1和{{ 1}}。posts
不为空)
我想我错过了什么。有谁能告诉我。
由于
答案 0 :(得分:1)
您在Post Model的with open('bloombergtest.csv', 'w', encoding='utf-8') as output_file:
方法中设置了错误的关系。它应该是tags()
在标记模型的return $this->belongsToMany('App\Tag');
方法中,您应该设置return posts()
有关详细信息,请参阅laravel docs