我需要计算帖子有多少评论.我该怎么做呢?
这是我的Listing.php模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Listing extends Model
{
public function reviews()
{
return $this->hasMany('\App\Review');
}
}
这是我的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'));
}
这是我的评论表:
最佳答案 我还没有对它进行测试,但下面的查询(使用查询构建器)应该可以提供您想要的内容 – 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数组.您可以通过与Eloquent Collection类似的方式轻松访问刀片模板中的那些.
@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