标签:仅创建一种关系

时间:2019-09-13 08:55:40

标签: php mysql laravel tags relationship

我有这个代码

wdDoc.Range(wdDoc.Goto(wdGoToPage, wdGoToLast).Start - 1, wdDoc.Range.End).Delete

hashtagName是一个功能,可修改hashtag的名称,因为我使用了WYSCIWYG编辑器,有时我在名称栏中遇到了html标签的问题。但这在这里并不重要。我试图解决问题,所以找到了可以代替附加使用的代码。

  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++;
    }
  }

但这不能解决我的问题。如果我存储具有2个或更多相同标签的文章,它将创建相同数量的关系。如果我在同一篇文章中使用3个标签,我将有3个关系。我该如何解决?

1 个答案:

答案 0 :(得分:0)

实施中的问题是您要检查hTag的ID。

为什么

因为如果您有两个相同的hTag,并且保存了第一个,则将获得ID1,然后将其附加,直到这里没有问题为止。但是,当您保存第二个相同的对象(首先不应该这样做)时,您将获得ID2,其中ID1与ID2不同,因此此检查行No such property: displayName for class: org.springframework.security.ldap.userdetails.LdapUserDetailsImpl 将找不到具有相同名称的hTag。 / p>

可能的解决方案:

$article->hashtags->contains($hash->id)