我需要计算一篇文章有多少评论。我该怎么做呢?
这是我的listing.php模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Listing extends Model
{

    public function reviews()
    {
        return $this->hasMany('\App\Review');
    }

}

下面是my review.php模型:
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Review extends Model
{
    protected $fillable = ['stars','name','comment'];

    public function listing()
    {
        return $this->belongsTo('\App\Listing');
    }
}

这是我的方法,我试图在控制器中计数
 public function mostReviews(Request $request) {

        $listings = Review::orderBy('-- most reviews here --')->take(10)->get();

        $headline = 'Most Reviewed Listings';

        return view('pages.listings', compact('listings', 'headline'));

    }

这是我的复习表:
php - 计算帖子有多少评论-Laravel 5.2-LMLPHP

最佳答案

我还没有测试过它,但是下面的查询(使用查询生成器)应该会给出您想要的内容-10个最有评论的列表。另外average_stars列应该返回平均星速率。通过将orderBy更改为average_stars,您可以轻松修改查询以获得10个最高评级的列表。

$listings = \DB::table('reviews AS r')
   ->select([
     'r.listing_id',
     \DB::raw('COUNT(*) AS no_of_reviews'),
     \DB::raw('AVG(r.stars) AS average_stars'),
     'l.*'])
   ->join('listings AS l', 'l.id', '=', 'r.listing_id')
   ->limit(10)
   ->orderBy('no_of_reviews', 'DESC')
   ->groupBy('listing_id')
   ->get();

请注意,laravel的5.2版本之前的版本这将返回stdObject数组。您可以很容易地访问刀片模板中的内容,方法与雄辩的集合类似。
@foreach($listings as $listing)
<tr>
   <td>{{ $listing->id }}</td>
   <td>{{ $listing->title }}</td>
   <td>{{ $listing->no_of_reviews }}</td>
   <td>{{ floor($listing->average_stars) }}</td>
</tr>
@endforeach

09-10 09:56
查看更多