php - 如何使用 laravel eloquent 从其他表中获取和显示数据
问题描述
我在我的控制器中使用这些代码从我的 2 个表中获取所有数据,它工作正常
$All = Customers::with('order')->paginate(10);
return response()->json([
'code' => 0,
'success' => true,
'data' => $All
], 200);
这是我如何定义这两个表之间的关系
class Customers extends Model
{
public function order()
{
return $this->hasMany(Orders::class, 'customer_id', 'id');
}
}
class Orders extends Model
{
public function customers()
{
return $this->belongsTo(Customers::class, 'customer_id', 'id');
}
}
现在我希望的输出是隐藏订单 ID、订单时间戳并将 customer_id 更改为客户姓名(客户姓名不在我的订单数据库表中)。
我'data' => DataResource::collection($All)
在我的控制器中使用,这是我的DataResource
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
'order' => $this->order
];
}
当然,输出与上图相同。
我的数据库结构:
任何人都可以帮助我吗?
解决方案
答案很简单,基本上是官方文档的副本。您只需要将您的订单OrderResource
也包含在其中。
// DataResource
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
'order' => OrderResource::collection($this->order)
];
}
// OrderResource
public function toArray($request)
{
return [
'items' => $this->items,
'quantity' => $this->quantity
];
}
我真的不明白为什么customer_name
当它已经存在于上面一个层次结构的客户对象中时,你为什么要在你的订单中包含它。但是如果你真的想添加它,你应该可以这样做:'customer_name' => $this->customers->name
。
附带说明:您确实应该与您的命名更加一致。DataResource
为什么在 about 时调用资源Customers
?Customers
为什么以复数形式而不是单数形式调用您的模型Customer
,这是惯例(如果您认为一个模型代表一个客户,则更合乎逻辑)。为什么当它返回一个客户时你的关系被称为belongsTo
复数,而当它返回一个或多个订单时你的关系被调用?customers()
hasMany
order
推荐阅读
- c# - 为什么导航发生时连接插件网络处理程序不起作用
- python-3.x - Python中的多进程在逐行读取文件时比单进程慢4000倍,这是怎么回事?
- javascript - 如何在另一个插件调用的设置中存储插件方法调用而不在 jQuery 中执行它?
- python - Django模板多个表,数据仅稍作修改
- swift - 在 Xcode9.3.1 中配置 LinePhone
- javascript - 如何在 jQuery 上获得唯一的选择器
- openmdao - OpenMDAO:什么时候需要定义偏导数?
- javascript - javascript读取对象作为函数的参数
- django - 模型级别的 Django 模型异或?
- ubuntu - 在 Ubuntu Bionic 上安装 Hyperledger Composer 先决条件时出错