如何通过Laravel dataTransformer传递所有Eloquent(ORM)结果?

时间:2017-09-25 14:49:08

标签: php laravel laravel-eloquent transformer

我从使用Eloquent(Laravel的ORM)构建的查询中获得结果

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

我想通过一个tracformer class LawyerTransformer extends TransformerAbstract{}传递结果,将一些数据添加到结果中。

当我尝试这个时:

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

我遇到以下问题:Method [collection] does not exist.

如何使用变压器转换所有结果?

1 个答案:

答案 0 :(得分:1)

你可以在集合实例上使用transform方法来实现类似的东西这里是一个将数组中的所有值递增1的示例;

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

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

和transfomer类

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

你可能会写得更干净但你得到了基本的想法。