【发布时间】:2020-01-15 03:17:09
【问题描述】:
我有这个代码
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], '#'))]
);
$article->hashtags()->attach($hash);
}
$i++;
}
}
hashtagName 是修改主题标签名称的函数,因为我使用 WYSCIWYG 编辑器,有时我在名称列中遇到 html 标签问题。但这并不重要。我试图解决我的问题,所以我找到了可以用来代替附加的代码。
if (! $article->hashtags->contains($hash->id)) {
$article->hashtags()->save($hash);
}
但这并不能解决我的问题。如果我存储具有 2 个或更多相同主题标签的文章,它会创建相同数量的关系。如果我在同一篇文章中使用了 3 个主题标签,我将有 3 个关系。我可以解决它吗?
【问题讨论】:
-
能否编辑您的问题并添加相关关系的代码?
-
你不需要从函数中返回任何东西吗?
-
你没有很好地解释你的问题:p,你想为文章中所有相同的 hashTag 创建一个 hashTag 关系吗?
-
$article->hashtags->contains($hash->id)- 确定包含基于 ID 的作品?我认为contains($this->hashtagName($arr[$i]))或contains('name', $this->hashtagName($arr[$i]))可能更有意义。 -
是的。我想在主题标签和文章之间创建一种关系。例如:我有 3 个标签:#hashtag x2 和 #helloworld。我想建立 2 关系。我没有创建与重复主题标签的关系。我不需要返回值,因为 tis 方法只存储主题标签并创建关系。
标签: php mysql laravel tags relationship