我有带有列的产品表 ID,名称 和列表的评论表 ID,Product_id,文字
我试图获取产品名称列表以及每个展示产品的最新评论,但我收到了最早的评论。我使用以下代码:
$products = DB::table('products')
->select(array('products.*',
DB::raw('COUNT(reviews.product_id) as reviews_count'),
DB::raw('reviews.text as review_text')))
->where('products.name', 'LIKE', '%'.$search_terms.'%')
->join('reviews', 'reviews.product_id', '=', 'products.id')
->groupBy('products.id')
->orderBy('reviews.id', 'desc')
->get();
答案 0 :(得分:3)
为什么不将Eloquent用于这么简单的请求?在您的模型中,产品创建与评论的关系。一个产品有很多评论。所以模型看起来像这样:
class Product extends \Eloquent {
protected $fillable = [];
public function reviews()
{
return $this->hasMany('Review');
}
}
在你的控制者中你可以做这样的事情:
$product = Product::with('reviews')->firstOrFail();
return View::make('Viewname')->withProduct($product);
而不是你认为:
@foreach ($product->reviews->sortBy('created_at') as $review)
{{ $review->text }} <br/>
@endforeach
而不是sortBy
,您可以take(3)
,例如,您将获得最近3条评论等。