【问题标题】:How to get total star of a particular post type如何获得特定帖子类型的总星数
【发布时间】:2020-01-20 23:19:49
【问题描述】:

我有不同的帖子类型供用户发表评论,例如:-

帖子类型:-

  1. 汽车
  2. 电视

用户 1:-在汽车的帖子类型下写评论并给它 5 星。

用户 2:- 也在相同的帖子类型下写了评论,给出了 3 颗星等

用户 3:- 在 Tv 下撰写评论并给予 3 星等

我喜欢获得平均星级的汽车类型并显示在后类型的汽车下,以及电视的平均星级和显示在电视下。有谁知道如何获得正确的总星数?任何建议都会有所帮助

我尝试通过获取所有帖子类型下的帖子然后循环获取星级,但它似乎会取回所有总星数,而不是在有意义的情况下获取每个帖子类型下的总星数


     $getposttypes  = Posttype::Join('categories','posttypes.category_id','=','categories.id')
      ->select('posttypes.id','posttypes.name','posttypes.slug','categories.name as categoryname','posttypes.created_at','posttypes.updated_at')->get();

      foreach ($getposttypes as $key) {
        $posts []=Post::Where('posttype_id',$key['id'])->get();
        foreach ($posts as $postkey) {
          foreach ($postkey as $keyval) {
            if($keyval['posttype_id'] ==$key['id']){
              $poststars [] = $keyval['rating'];
            }
          }
        }
      }

【问题讨论】:

    标签: php laravel laravel-5.8


    【解决方案1】:

    这是可能对您有所帮助的查询。

    从您的解释中假设。 “Posttype”包含“汽车”和“电视”。 & "Post" 包含所有评分。

    在 Posttype 模型中创建 post 函数

    function post() {
        return $this->hasMany(Post::class, 'posttype_id', 'id');
    }
    

    & 编写此查询以获得每种帖子类型的平均结果。

    $post_types = Posttype::with(['post' => function($query){
        $query->avg('rating');
    }])->get();
    

    如果您发现此解决方案有任何问题,请告诉我。

    【讨论】:

    • 嗨,Vishal,感谢您回复我,我会试一试,让您知道我的进展情况
    • 我是否也必须在 post 模型中添加一个功能?因为目前我的帖子模型有一个函数“return $this->hasMany('App\Posttype')”,而 Posttype 模型有一个函数“return $this->belongsTo('App\Post');”
    • 嗨,Vishal,我能够使用你的想法让它工作。我的解决方案:- $posts_type = Post::Where('posttype_id',$key['id'])->With('posttype')->get(); $totalstars[] = $posts_type->avg('rating');
    • 太棒了!很高兴知道它有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 2021-12-15
    • 2020-06-06
    • 1970-01-01
    相关资源
    最近更新 更多