Laravel 5.2,Eloquent,将表1连接到表2,并带来表2的MAX列

时间:2017-06-18 19:58:07

标签: laravel join eloquent laravel-5.2 max

如何使用Laravel(5.2)和Eloquent ...

实现以下等效SQL查询
SELECT 
     products.id
    ,products.name
    ,MAX(bids.bid_price) as maximum_bid
FROM products
    INNER JOIN bids
        ON products.id = bids.product_id 
GROUP BY products.id

基于以下背景:

我有一个拍卖系统,其中包含用户出价的产品。这意味着一个产品可以有多个出价,一个出价只能用于一个产品。

现在我想要检索具有当前最高出价的产品

TABLES:

产品

  • ID
  • 名称

出价

  • ID
  • bid_price
  • PRODUCT_ID

模型:

产品

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    /**
     * A Product has many bids
     *
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function bids()
    {
        return $this->hasMany('App\Bid');
    }
}

出价

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Bid extends Model
{
    /**
     * A Bid belongs to a product
     *
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function product()
    {
        return $this->belongsTo('App\Product','product_id');
    }
}

2 个答案:

答案 0 :(得分:1)

试试这个:

DB::table('products')
    ->select(['products.id', 'products.name', DB:raw('MAX(bids.bid_price) as maximum_bid')])
    ->join('bids', 'products.id', '=', 'bids.product.id')
    ->groupBy('products.id')
    ->get();

为特定产品抛出where子句:

DB::table('products')
    ->select(['products.id', 'products.name', DB:raw('MAX(bids.bid_price) as maximum_bid')])
    ->join('bids', 'products.id', '=', 'bids.product.id')
    ->groupBy('products.id')
    ->where('products.id, '=', 123)
    ->get();

答案 1 :(得分:0)

这使用了Eloquent。

Product::join('bids', 'products.id', '=', 'bids.product.id')
    ->select(['products.id', 'products.name', DB:raw('MAX(bids.bid_price) as maximum_bid')])
    ->groupBy('products.id')
    ->where('products.id', '=', 123)
    ->get();