猿问

如何使用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

    ];

}

当然输出与上图相同。


我的数据库结构:


订单表:

http://img3.mukewang.com/61a0c1be0001ccc810040404.jpg

客户表:

http://img1.mukewang.com/61a0c1cc0001d99605540636.jpg

任何人都可以帮助我吗?


泛舟湖上清波郎朗
浏览 210回答 1
1回答

牧羊人nacy

答案很简单,基本上就是一份官方文档的副本。您只需要将您的订单也包装在一个OrderResource中。// DataResourcepublic 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)    ];}// OrderResourcepublic 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在返回一个或多个订单时被称为复数?
随时随地看视频慕课网APP
我要回答