从另一个表中获取最新而不是最旧的项目

时间:2014-07-24 06:17:25

标签: mysql sql laravel eloquent query-builder

我有带有列的产品表 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();

1 个答案:

答案 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条评论等。