簡體   English   中英

在存儲標簽之前刪除所有標簽

[英]Remove all tags before store tags

我有這個代碼

  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中

由於Article可以包含許多hashtagshashtag可以屬於許多articles ,因此這是ManyToMany關系。

您可以使用sync方法sync主題標簽,所有不在新關聯數組中的舊主題標簽都將被自動刪除...

$article->hashtags()->sync($arrayOfHashtagsIds);

來自文檔

同步關聯

您也可以使用sync方法構造多對多關聯。 sync方法接受一組ID放置在中間表上。 給定數組中沒有的任何ID將從中間表中刪除。 因此,完成此操作后,中間表中將僅存在給定數組中的ID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM