Php 在存储标记之前删除所有标记
我有这个密码Php 在存储标记之前删除所有标记,php,mysql,laravel,tags,relationship,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->descriptio
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++;
}
}
私有函数hashtagName($string){
$name=$string;
$name=ltrim($name,#’);
$name=trim($name);
返回$name;
}
私有函数hashtags($article){
$htag='#';
$arr=分解(“,$article->description);
$arrc=计数($arr);
$i=0;
$arr_id=[];
而($i<$arrc){
if(substr($arr[$i],0,1)==$htag){
$hash=Hashtag::firstOrCreate(
['name'=>this->hashtagName($arr[$i]),'slug'=>str_slug(ltrim($arr[$i],'#'))]
);
如果(!$article->hashtags->contains('hashtag_id',$this->hashtagName($arr[$i])){
$article->hashtags()->save($hash);
}
}
$i++;
}
}
此代码将标记正确地存储到数据库中。如果我尝试在WYSCIWYG编辑器中使用一些hashtag,我会遇到问题。通常,WYSCIWYG编辑器会添加自己的html标记,这段代码会保存它。例如,它存储在DB helloworld中,因为
文章
可以有许多标签
,而标签
可以属于许多文章
,所以它是一种多人
关系
您可以使用sync
方法同步hashtags,任何不在新关联数组中的旧hashtags都将自动删除
$article->hashtags()->sync($arrayOfHashtagsIds);
从
同步关联
您还可以使用sync方法构造多对多关联。sync方法接受要放置在中间表上的ID数组。不在给定数组中的任何ID都将从中间表中删除。因此,此操作完成后,中间表中将只存在给定数组中的ID。因为一篇
文章可以有许多标签
,而一个标签
可以属于许多文章
,这是一种多人
关系
您可以使用sync
方法同步hashtags,任何不在新关联数组中的旧hashtags都将自动删除
$article->hashtags()->sync($arrayOfHashtagsIds);
从
同步关联
您还可以使用sync方法构造多对多关联。sync方法接受要放置在中间表上的ID数组。不在给定数组中的任何ID都将从中间表中删除。因此,此操作完成后,中间表中将只存在给定数组中的ID