Как передать все результаты Eloquent (ORM) через Laravel dataTransformer?

Я получаю результаты из запроса, построенного с использованием Eloquent (Laravel ORM)

$query = Lawyer::whereHas('user', function($q) use ($request) {
            $q->where('is_active', true);
        });
$result = $query->get()

Я хотел бы передать результаты, которые я получаю, через преобразователь class LawyerTransformer extends TransformerAbstract{}, чтобы добавить некоторые данные к результатам.

Когда я пытаюсь это:

$this->collection($query->get(), new LawyerTransformer())

У меня следующая проблема: Method [collection] does not exist.

Как преобразовать все результаты с помощью преобразователя?


person Gauthier    schedule 25.09.2017    source источник
comment
Вы пробовали то, что написано в документации laravel.com/docs/5.5/collections#method -трансформировать? Кстати, результат $query->get() уже является коллекцией, скорее всего   -  person Maantje    schedule 25.09.2017


Ответы (1)


Вы можете использовать метод преобразования для экземпляра коллекции, чтобы добиться чего-то подобного. Вот пример, который увеличивает все значения в массиве на 1;

$collection = collect([1, 2, 3]);

$collection->transform(function ($item, $key) {
    return (new IncrementTransformer)->transform($item);
});

И класс трансформеров

class IncrementTransformer
{
    public function transform($item)
    {
        return $item += 1;
    }
}

Возможно, вы могли бы написать это немного чище, но вы поняли основную идею.

person Maantje    schedule 25.09.2017
comment
Спасибо, именно этого ответа я и ждал. Я просто не понял объект коллекции и как использовать на нем объект-трансформер. Теперь я понял. Спасибо ! - person Gauthier; 25.09.2017