Php 选择Laravel Eloquent上组的最后一行

Php 选择Laravel Eloquent上组的最后一行,php,sql,laravel,eloquent,Php,Sql,Laravel,Eloquent,我有三张桌子: 商店 |-id |-名字 产品 |-id |-名称 价格 |-id |-值 |-产品标识 |-门店标识 |-在 正如您所见,我们在多家商店中都有相同的产品,每家商店都有自己的价格(当价格更新以维护历史记录时,会创建一个新记录) 我的问题是: A) 我想显示某一产品在所有商店的当前价格表 B) 我想显示所有产品的列表和最便宜的价格,以及有此价格的商店名称 如何在Laravel 5.6的雄辩版上实现这一点?这将帮助您编写查询: A. select st.name,pd.nam

我有三张桌子:

商店
|-id
|-名字

产品
|-id
|-名称

价格
|-id
|-值
|-产品标识
|-门店标识
|-在

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

我的问题是:
A) 我想显示某一产品在所有商店的当前价格表
B) 我想显示所有产品的列表和最便宜的价格,以及有此价格的商店名称


如何在Laravel 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

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

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

2) 产品(有很多价格)

3) 商店(有很多价格)

1) Price.php

<?php

namespace App\Models;
use Eloquent;

class Price extends Eloquent{

    protected $table = 'prices';

    public function store()
    {
        return $this->belongsTo('App\Models\Store');
    }

    public function product()
    {
        return $this->belongsTo('App\Models\Product');
    }

}
我希望你能帮助这一点。

使用此关系:

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

(B)


@我的回答是否有用
<?php

namespace App\Models;

use Eloquent;

class Store extends Eloquent
{
    protected $table = "stores";

    public function prices()
    {
        return $this->hasMany('App\Models\Store');
    }

}
$price = \App\Models\Price::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;        
}