我有一些文章可以包含不同的标签。例如,有5个片段:(php,html,css,laravel,js),我也可以包含不同的标签。例如4件:(laravel,php,html,css)
我已经定义了关系并且它可以工作。我仍然缺乏articel与小组的联系。
如何显示标签中匹配的组中的所有帖子?
有人有想法或可以帮助我吗?
帖子模型
public function groups()
{
return $this->belongsToMany('App\Group');
}
public function tags()
{
return $this->morphToMany('App\Tag', 'taggable');
}
标记模型
public function articles()
{
return $this->morphedByMany('App\Article', 'taggable');
}
public function groups()
{
return $this->morphedByMany('App\Group', 'taggable');
}
组模型
public function tags()
{
return $this->morphToMany('App\Tag', 'taggable');
}
public function articles()
{
return $this->belongsToMany('App\Article');
}
答案 0 :(得分:0)
自您的问题更新以来,我发现人际关系中的错误
将 article_group 表名更改为可标记。因为laravel在其他表名的基础上执行某些任务。如果仍然要使用article_group,则必须明确告知laravel表名。 阅读HasRelationships.php(完整路径如下),您将了解laravel如何自动链接它们。
/your_project/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php
是 您的需求的解决方案是许多多态关系
在这里https://laravel.com/docs/5.6/eloquent-relationships#many-to-many-polymorphic-relations上阅读。
您将创建如下所示的4个表,然后在“模型”中创建关系
articles
id - integer
name - string
groups
id - integer
name - string
tags
id - integer
name - string
taggables
tag_id - integer
taggable_id - integer
taggable_type - string
关系将是这样的:
class Article extends Model
{
public function tags()
{
return $this->morphToMany('App\Tag', 'taggable');
}
}
反向关系将是这样:
class Tag extends Model
{
public function articles()
{
return $this->morphedByMany('App\Article', 'taggable');
}
public function groups()
{
return $this->morphedByMany('App\Group', 'taggable');
}
}
现在,您可以像这样获得Article的标签:
$article = App\Article::find(1);
foreach ($article->tags as $tag) {
//
}
向网上论坛添加文章如下:
$article = App\Article::find(1);
$group = App\Group::find(1);
$article->groups()->sync($group->id);
Read this for more https://laravel.com/docs/5.6/eloquent-relationships#updating-many-to-many-relationships
希望这可以解决您的问题。