选择Laravel Eloquent上组的最后一行



我有三个表:

商店
|- 编号
|- 名称

产品展示
|- 编号
|- 名称

价格
|- id
|- 值
|- product_id|- store_id

|- created_at

如您所见,我们在几家商店中都有相同的产品,每个商店都有自己的价格(更新价格以维护历史记录时会创建一个新记录(。

我的问题是:
A(我想显示某个产品所有商店的当前价格表;
B( 我想显示所有产品和您最便宜的价格的列表,并带有具有此价格的商店名称。

在拉拉维尔的雄辩 5.6 上怎么可能?

这将帮助您编写查询:

A.   select st.name,pd.name, pr.value from prices pr
left join products pd on pd.id = pr.product_id
left join stores st on st.id = pr.store_id
B.   select st.name,pd.name, min(pr.value) as price from prices pr
left join products pd on pd.id = pr.product_id
left join stores st on st.id = pr.store_id group by st.name,pd.name

使用 Eloquent 获取关系数据是一种简单的方法。

1(价格(属于产品和商店(

2(产品(有很多价格(

3(商店(有很多价格(

1(价格.php

<?php
namespace AppModels;
use Eloquent;
class Price extends Eloquent{
protected $table = 'prices';
public function store()
{
return $this->belongsTo('AppModelsStore');
}
public function product()
{
return $this->belongsTo('AppModelsProduct');
}
}

2(产品.php

<?php
namespace AppModels;
use Eloquent;
class Product extends Eloquent
{
protected $table = "products";
public function prices()
{
return $this->hasMany('AppModelsPrice');
}
}

3(商店.php

<?php
namespace AppModels;
use Eloquent;
class Store extends Eloquent
{
protected $table = "stores";
public function prices()
{
return $this->hasMany('AppModelsStore');
}
}

模型声明后,需要获取这样的记录

$price = AppModelsPrice::with(['store','product'])->groupby(['store.name','product.name'])->get();
$price->store->name;

我希望你必须帮助这个。

使用此关系:

class Product extends Model
{
public function stores()
{
return $this->belongsToMany(Store::class, 'prices')->withPivot('value');
}
}

一(

foreach($product->stores as $store) {
$price = $store->pivot->value;
}

二(

$products = Product::with('stores')->get();
foreach($products as $product) {
$cheapestStore = $product->stores->sortBy('pivot.value')->first();
$price = $cheapestStore->pivot->value;        
}

相关内容

  • 没有找到相关文章

最新更新