laravel以雄辩方式从数据透视表中获取最近3条记录

x7yiwoj4  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(181)

我有一个项目表和一个供应商表有多对多的关系。供应商会在不同的日期报不同的价格。我如何得到最新的3价格(无论供应商)为每个项目使用雄辩?
项目表
| 身份证|项目代码|项目名称|
| - ------| - ------| - ------|
| 1个|代码1|项目1|
| 第二章|代码2|项目2|
供应商表
| 身份证|供应商代码|供应商_名称|
| - ------| - ------| - ------|
| 1个|供应商1|姓名1|
| 第二章|供应商2|姓名2|
物料_供应商
| 身份证|项目标识|供应商ID|价格|价格_at|
| - ------| - ------| - ------| - ------| - ------|
| 1个|1个|1个|一百|2022年12月1日00时11分22秒|
| 第二章|1个|1个|一百零一|2022年12月2日00时11分22秒|
| 三个|1个|第二章|九十八|2022年12月3日00时11分22秒|
| 四个|1个|1个|九十五|2022年12月4日00时11分22秒|
| 五个|1个|第二章|一百二十|2022年12月5日00时11分22秒|
| 六个|第二章|1个|一百零五|2022年12月6日00时11分22秒|
| 七|第二章|1个|一百|2022年12月7日00时11分22秒|
| 八个|第二章|1个|一百零一|2022年12月8日00时11分22秒|
| 九|第二章|第二章|九十八|2022年12月9日00时11分22秒|
| 十个|第二章|第二章|九十五|2022年12月10日00时11分22秒|
| 十一|1个|1个|一百二十|2022年12月11日00时11分22秒|
| 十二|1个|第二章|一百零五|2022年12月12日00:11:22|
我想得到的是下面这样的
| 项目名称|供应商_名称|价格|价格_at|
| - ------| - ------| - ------| - ------|
| 项目1|姓名2|一百二十|2022年12月5日00时11分22秒|
| 项目1|姓名1|一百二十|2022年12月11日00时11分22秒|
| 项目1|姓名2|一百零五|2022年12月12日00:11:22|
| 项目2|姓名1|一百零一|2022年12月8日00时11分22秒|
| 项目2|姓名2|九十八|2022年12月9日00时11分22秒|
| 项目2|姓名2|九十五|2022年12月10日00时11分22秒|

class Item extends Model
{
public function supplier() {
        return $this->belongsToMany(Supplier::class)
        ->withPivot('price', 'price_at')
        ->withTimestamps();
    }
}
class Supplier extends Model
{
public function item() {
        return $this->belongsToMany(Supplier::class)
        ->withPivot('price', 'price_at')
        ->withTimestamps();
    }
}

尝试下面,但我不知道如何限制它为每个项目3最新的定价

Item::whereKey($this->selectedItems)
        ->with(['supplier' => function ($q) {
            $q->orderBy('price_at','DESC');
        }])
        ->get();
4ioopgfo

4ioopgfo1#

如laravel文档所示,可以使用take方法将结果限制为特定的数字。
所以我们可以这样做

Item::whereKey($this->selectedItems)
    ->with(['supplier' => function ($q) {
        $q->orderBy('price_at','DESC');
    }])->take(3)->get();

相关问题