有一张订单表。它链接到表 - 客户和表 - 服务。在输出中检索带有链接的模型,我得到以下形式的 json 数组:
[
{
"id": 8,
"service_id": 3,
"customer_id": 8,
"date": "29.05.2017",
"time": "11:00:00",
"created_at": "2017-05-11 21:59:49",
"updated_at": "2017-05-11 21:59:49",
"deleted_at": null
},
...
]
如何做到这一点,而不是模型中指定的键,并且可能更好,只是除了提取对象中已经存在的字段之外,还有相关模型的字段。例如:
[
{
"id": 8,
"service_id": 3,
"service_name": "укладка" //
"customer_id": 8,
"customer_name": "Евгений", //
"customer_phone":"05022222288", //
"date": "29.05.2017",
"time": "11:00:00",
"created_at": "2017-05-11 21:59:49",
"updated_at": "2017-05-11 21:59:49",
"deleted_at": null
},
...
]
或者
[
{
"id": 8,
"service":{
"name":"укладка" //
},
"customer":{
"name": "Евгений", //
"phone":"05022222288", //
},
"date": "29.05.2017",
"time": "11:00:00",
"created_at": "2017-05-11 21:59:49",
"updated_at": "2017-05-11 21:59:49",
"deleted_at": null
},
换句话说,我希望来自其他表的数据及其字段的内容(不仅仅是外键形式的裸 ID)位于具有从数据库中提取的关系的模型中。您需要获得一个可以方便地在浏览器中显示的表格。
获得预期结果的唯一方法是 JOINs?Laravel 中有现成的解决方案可以生成我需要的表格吗?
有一个使用方法的选项
with,那么它会立即拉出一个关系表,也就是说,如果你有一个名为Order和模型的模型Service,Customer你想进入对象,Order写如下:如果您的关系按照我的示例命名,那么在
Order方法中的对象中您relations将接收对象Service并Customer通过您将接收数据。$order->service$order->customer是的,你不会在方法中按计划得到它
attributes,但你会立即将它们放在对象中,要将它们添加到那里你可以在所有字段上使用mutators,然后你可以创建 customer_name 属性等,但它更好不是这样做,而是通过中继获取数据。阅读什么是Fractal和GraphQL,分别有 Laravel 的包:spatie/laravel-fractal 和 Folkloreatelier/laravel-graphql
我绝不是说 Yaroslav Molchan 的答案不正确,我只是想用可能的选项来补充答案!
这种方法的优点是什么:
您可以创建多个视图,这些视图将根据访问权限提供
该视图将包含此页面所需的信息(请求)
视图将采用您需要的格式,没有额外的字段
另外我认为它会帮助你制作一个单一的响应格式
有各种各样有用的好东西,例如 API 版本控制或响应缓存,并且作为一个非常重要的事实 :) 好吧,你永远不知道,原则上,你并没有强烈依赖框架或 Eloquent