2016-07-15 34 views
1

我在DB中有几张表,有关系。例如:流明如何从模型集合构建序列化结构?

user table 
- id 
- name 
- email 
- created_at 

orders table 
- id 
- user_id 
- status 
- created_at 

order_items table 
- id 
- order_id 
- item_id 
- count 

items table 
- id 
- article 
- name 
- ... 

最后,我需要的数据转换为这种观点 - 订单:

[ 
    { 
    "id": 1, 
    "status": "created", 
    "user": {"id":1, "name":"Max"}, 
    "items":[{"id":1, "name":"Banana", "count": 2}, {...item two}] 
    }, 
    { 
    .. order two 
    } 
] 

有些字段将被隐藏(created_at等),并与它的关系选择的所有车型。

所以,我可以这样做

$userOrders = Orders::where([ 
    'user_id' => $request->user()->id 
]) 
    ->select(['id']) 
    ->with('orders.items') // <<<< oops nested relations 
    ->get(); 

但问题:

  1. 如何使用嵌套关系
  2. 如何离开的嵌套关系(最好是基于模型只所需的字段选择情景时,字段列表取决于情况)

回答

0

你不想s选什么,只是用...

$userOrders = Orders::with('orders.items')->where('user_id', $request->user()->id)->get(); 

而你想隐藏的东西将被设置在每个单独的模型。

例如,假设您要隐藏created_at列的用户属性。添加属性...

protected $hidden = ['created_at', 'updated_at']; // + any other fields you want to hide on the user model. 
+0

是否可以设置个人隐藏的“规则”?让我解释一下,当选择/ v1 /订单的订单时,我希望返回模型没有created_ attr,但当/ v1/orderInfo时,我想返回所有模型属性。 – sharp