@vadikrudnov

Как с помощью отношений получить в параметре массив состоящий только из значений?

Всем привет!

Есть таблица Users и она связана с таблицей Books. Необходимо получить в запросе к Users данные из Books, только значения.
В User прописано:
public function books()
    {
        return $this->hasMany(Book::class);
    }

Пробую получить значения так:
$users = User::with('books')->get();
В итоге получаю в ответе параметр books:
...
'books' :
   0:
      id: 1
      user_id: 1
      book: "Sample book"
...

Отлично, выполняется 1 запрос и мы получаем данные, но не в том виде в котором надо, а надо в таком:
...
'books' :
    "Sample book"
    "Sample book2"
    "Sample book3"
    ...
...

Попробовал добавить в запрос map:
$users = User::get()->map(function ($title) {
        $title['books'] = $title->books()->get()->pluck('book')->all();
        return $title;
    });

Получаем то, что хотим, но тогда вызывается безумное количество запросов на каждого User с отношением Book.

Как с помощью отношений получить в параметре массив состоящий только из значений при этом не создающий множество запросов?
  • Вопрос задан
  • 85 просмотров
Решения вопроса 2
Fragster
@Fragster
помогло? отметь решением!
что-то типа такого:
User::with('books:user_id,book')->get()->map(function ($user) {
        $user['books'] = $user->books->pluck('book');
        return $user;
    })
Ответ написан
@vadikrudnov Автор вопроса
Вообщем решение получилось такое:
User::with('books')->get()->map(function($user) {
            $user->books = $user->books->map->book->values();
            $user->unsetRelation('books');
            return $user;
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы