以下内容:
Customer::with('tickets:customer_id,subject')->get();
返回以下内容:
[
{
"id": 1,
"company": "Test Ltd",
"support": "Standard",
"tickets": [
{
"customer_id": "1",
"name": "Test ticket 1"
},
{
"customer_id": "1",
"name": "Test ticket 2"
}
]
}
]
如何展平相关字段tickets
以获得:
tickets: ["Test ticket 1", "Test ticket 2"]
我尝试在->flatten()
之后执行->get()
,但这根本不起作用。
感觉应该是我想念的简单东西,只是在文档中或通过谷歌搜索找不到(感谢with
这个词,几乎可以使所有理智的结果搞定)。
答案 0 :(得分:3)
我尚未对此进行测试,但在这种情况下使用->map()
可能会为您提供帮助:
$customers = Customer::with('tickets:customer_id,name')
->get()
->map(function($customer, $key) {
$customer->tickets = $customer->tickets->pluck('name')->all();
return $customer;
})->all();
->pluck()
将仅返回指定的key
的值。
这可以通过在地图中运行查询并避免急于加载来实现:
$customers = Customer::all()
->map(function($customer, $key) {
$customer['tickets'] = $customer->tickets()->get()->pluck('name')->all();
return $customer;
})->all();