@jazzus

Как передать переменную в Laravel Resource Collection?

В контроллере делаю проверку и отдаю коллекцию в json
$check =  проверка с запросом в бд возвращает true/false;
return ProjectResource::collection($projects);

в ресурсе поле формируется из метода
'check' => $this->metod($check),
Если делать проверку в методе metod, то будет запрос в бд на каждый объект коллекции (т.к. check делает запрос в бд). Поэтому нужно заранее передать в ресурс результат проверки, т.е. переменную check. Как это сделать без преобразования коллекции с помощью map в контроллере? Можно ли передать переменную в ресурс?
  • Вопрос задан
  • 1021 просмотр
Решения вопроса 1
Alex_Wells
@Alex_Wells
PHP/Kotlin
В базовый класс коллекции
/**
     * Create new anonymous resource collection.
     *
     * @param mixed         $resource
     * @param callable|null $each
     *
     * @return AnonymousResourceCollection
     */
    public static function collection($resource, callable $each = null)
    {
        $collection = new AnonymousResourceCollection($resource, \get_called_class());

        if ($resource && (! $resource instanceof MissingValue) && $each) {
            $collection->resource->each($each);
        }

        return $collection;
    }

и в контроллер
$check = true;

return ProjectResource::collection($projects, function (ProjectResource $resource) use ($check) {
    $resource->setCheck($check);
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы