首页 > 解决方案 > 从数据透视表中获取数据

问题描述

我有两个带有数据透视表的表

用户

编号 | 姓名 | 电子邮件

餐桌饮品

编号 | 姓名 | 价格

数据透视表user_drinks

编号 | 用户 ID | 饮料ID | 数量 | 价格 | 地位

饮料模型

public function users()
{
   return $this->belongsToMany('App\User', 'user_drinks', 'drink_id', 'user_id')->withPivot('price', 'quantity')->withTimestamps();
}

用户模型

public function drinks()
{
   return $this->belongsToMany('App\Drink', 'user_drinks', 'drink_id', 'user_id')->withPivot('price', 'quantity')->withTimestamps();
}

我想从数据透视表中获取购买饮料的最新用户以及价格和数量,例如

名为 John 的用户 1 以 50 美元的价格购买了 2 杯咖啡

名为 Jane 的用户 2 以 75 美元的价格购买了 3 杯咖啡

标签: phplaraveleloquent

解决方案


将此关系用于用户模型

public function drinks()
{
    return $this->belongsToMany(Drink::class, 'user_drinks')->withPivot(['quantity', 'price','status'])->withTimestamps();
}

为拿到它,为实现它:

$user = User::with(['drinks' => function ($q) {
  $q->orderBy('created_at', 'desc');
}])->orderByDesc('drinks.created_at')->get();

推荐阅读