我有三个表:
商店
|- 编号
|- 名称
产品展示
|- 编号
|- 名称
价格
|- 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;
}