如何使用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:
产品
出价
模型:
产品
<?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');
}
}
答案 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();