自动链接文章和组

时间:2018-08-13 16:47:33

标签: laravel view tags grouping

我有一些文章可以包含不同的标签。例如,有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');
}

1 个答案:

答案 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

希望这可以解决您的问题。