Задать вопрос
crashxd
@crashxd
Backend разработчик

Как в Laravel API Resources скрывать поля при выводе в коллекции?

Есть, к примеру, роут для вывода списка статей и роут для вывода конкретной статьи:
public function index()
{
    return new ArticleCollection(Article::all());
}

public function show(Article $article)
{
    return new ArticleResource($article);
}


В ArticleResource:
public function toArray($request)
{
    return [
        'id' => $this->id,
        'title' => $this->title,
        'content' => $this->content,
    ];
}


В ArticleCollection:
public function toArray($request)
{
    return [
        ArticleResource::collection($this->collection),
    ];
}


Можно ли сделать так, чтобы при выводе списка статей не выводилось поле content, не создавая еще один дополнительный ArticleResource отдельно для вывода списка?

Т.е. грубо говоря для первого роута получить json:
{
    "data": [
        {
            "id": 1,
            "title": "Заголовок 1"
        },
        {
            "id": 2,
            "title": "Заголовок 2"
        }
    ]
}


Для второго роута получить:
{
    "data": {
        "id": 1,
        "title": "Заголовок 1",
        "content": "Lorem Ipsum is simply dummy text of the printing and typesetting industry.",
    }
}


Может быть через $this->when как-то проверить, что это выводится ресурс внутри коллекции или что-то такое?
  • Вопрос задан
  • 1004 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
crashxd
@crashxd Автор вопроса
Backend разработчик
Нашел вот такое решение. Возможно не супер удобное, но решает мою задачу.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@NubasLol
public function toArray($request)
    {
        return $this->collection
            ->map
            ->toArray($request, true)
            ->all();
    }


public function toArray($request, $isCollection = false)
Ответ написан
Почему в select(id, title) не указываете только то что нужно, зачем с бд вытаскивать все, что бы потом скрыть?
Ответ написан
Ваш ответ на вопрос

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

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