Как получить массив из одного поля из связанной модели в laravel? - PullRequest
1 голос
/ 13 марта 2019

Следующее:

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 Ответ

3 голосов
/ 13 марта 2019

Я не проверял это, но использование ->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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...