为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用laravel eloquent从其他表中获取和显示数据

如何使用laravel eloquent从其他表中获取和显示数据

PHP
泛舟湖上清波郎朗 2021-11-26 19:14:37
我在我的控制器中使用这些代码从我的 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)在我的控制器中使用,这是我的DataResourcepublic function toArray($request){    return [        'id' => $this->id,        'name' => $this->name,        'created_at' => $this->created_at,        'updated_at' => $this->updated_at,        'order' => $this->order    ];}当然输出与上图相同。我的数据库结构:订单表:客户表:任何人都可以帮助我吗?
查看完整描述

1 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

答案很简单,基本上就是一份官方文档的副本。您只需要将您的订单也包装在一个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在返回一个或多个订单时被称为复数?


查看完整回答
反对 回复 2021-11-26
  • 1 回答
  • 0 关注
  • 186 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信