在存储标签之前删除所有标签

时间:2019-09-13 15:12:17

标签: php mysql laravel tags relationship

我有这个代码

  private function hashtagName($string){
    $name = $string;
    $name = ltrim($name, '#');
    $name = trim($name);
    return $name;
  }
  private function hashtags($article){
    $htag = '#';
    $arr = explode(" ", $article->description);
    $arrc = count($arr);
    $i = 0;
    $arr_id = [];
    while($i < $arrc){
      if(substr($arr[$i], 0, 1) === $htag ){
        $hash = Hashtag::firstOrCreate(
            ['name' => $this->hashtagName($arr[$i]), 'slug' => str_slug(ltrim($arr[$i], '#'))]
        );

        if (! $article->hashtags->contains('hashtag_id', $this->hashtagName($arr[$i]))) {
          $article->hashtags()->save($hash);
        }
      }
      $i++;
    }
  }

此代码将标签正确存储到db中。如果我尝试在WYSCIWYG编辑器中使用一些标签,则会遇到问题。所见即所得(WYSCIWYG)编辑器经常添加它自己的html标记,并且此代码将其保存。例如,它存储在数据库helloworld中

1 个答案:

答案 0 :(得分:0)

由于aws s3 cp可以有许多cp,而Article可以属于许多hashtags,所以这是hashtag的关系。...

您可以使用articles方法同步主题标签,所有不在新关联数组中的旧主题标签都将被自动删除...

ManyToMany

Docs

同步关联

您还可以使用sync方法构造多对多关联。 sync方法接受一组ID放置在中间表上。给定数组中没有的任何ID将从中间表中删除。因此,完成此操作后,中间表中将仅存在给定数组中的ID。