首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在hashtag中创建关系

在hashtag中创建关系
EN

Stack Overflow用户
提问于 2019-07-31 07:59:11
回答 1查看 78关注 0票数 0

我想要创建一个hashtag系统。目前我有这样的代码:

代码语言:javascript
复制
private function hashtags($post){
  $htag = '#';
  $arr = explode(" ", $post->description);
  $arrc = count($arr);
  $i = 0;
  while($i < $arrc){
    if(substr($arr[$i], 0, 1) === $htag ){
      $hash = Hashtag::where('name', ltrim($arr[$i], '#'))
                     ->where('slug', str_slug(ltrim($arr[$i], '#')))
                     ->first();
      if(!$hash){
        Hashtag::create([
          'name' => ltrim($arr[$i], '#'),
          'type' => 1,
          'slug' => str_slug(ltrim($arr[$i], '#'))
        ]);
      }

      $current_hash = Hashtag::where('type', 1)
                             ->where('name', ltrim($arr[$i], '#'))
                             ->first();
      \DB::insert('insert into hashtag_post (hashtag_id, post_id) values (' .$current_hash->id. ', ' .$post->id. ')');
    }
    $i++;
  }

}

这段代码对我不好,因为我更喜欢使用附加方法,但是如果我尝试使用$post->hashtags()->attach([1, 2, 3]);或使用hashtag的id创建的其他数组,则会显示错误:

“调用未定义方法App\Post::hashtag()”。

我的问题是:如何在这个示例中使用附件,以及如何改进代码。看起来不太好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-31 08:54:18

首先,您的关系应该是public方法。

其次,这两种关系都应该是belongsToMany

Post

代码语言:javascript
复制
public function hashtags()
{
    return $this->belongsToMany(Hashtag::class);
}

标签

代码语言:javascript
复制
public function posts()
{
    return $this->belongsToMany(Post::class);
}

只是一个FYI,Laravel附带了一些帮助方法,可以减少您需要编写的内容,例如firstOrCreate()。因此,这是:

代码语言:javascript
复制
$hash = Hashtag::where('name', ltrim($arr[$i], '#'))
                     ->where('slug', str_slug(ltrim($arr[$i], '#')))
                     ->first();
if(!$hash){
    Hashtag::create([
      'name' => ltrim($arr[$i], '#'),
      'type' => 1,
      'slug' => str_slug(ltrim($arr[$i], '#'))
    ]);
}

可以成为:

代码语言:javascript
复制
$hash = Hash::firstOrCreate(
    ['name' => ltrim($arr[$i], '#'), 'slug' => str_slug(ltrim($arr[$i], '#'))],
    ['type' => 1]
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57285905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档