如何从Laravel中的相关模型中的单个字段中获取数组?

时间:2019-03-13 16:15:02

标签: laravel-5 eloquent

以下内容:

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这个词,几乎可以使所有理智的结果搞定)。

1 个答案:

答案 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();