Lumen如何从模型集合中构建序列化结构?

时间:2016-07-15 12:35:44

标签: laravel laravel-5.2 lumen

我在DB中有几个关系表。例如:

public class FooController : ApiController
{
    public string Get(string name="Bar")
    {
        return $"Hello {name}"};
    }
}

最后我需要将数据转换为此视图 - 订单:

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
- ...

某些字段将被隐藏(created_at等),并且所有模型都与其关联。

所以,我可以做类似

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

但问题是:

  1. 如何使用嵌套关系进行选择
  2. 如何仅从嵌套关系中保留所需的字段(理想情况下,当字段列表取决于方案时,基于模型方案)

1 个答案:

答案 0 :(得分:0)

您不想选择任何内容,只需使用...

$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.