Как в Laravel вызвать метод модели?

Продолжаю изучать Laravel. Работаю с ресурсами.
  • Есть модель, контроллер, ресурс Initial (первый старт для сайта)
  • Есть модель, контроллер, ресурс Categoty (категории сайта)


В InitialResource пишу
public function toArray($request) {
        return [
            'mainMenu'   => CategoryResource::collection(Category::all()),
            'navigation' => '',
            'cities'     => '',
            'status'     => 'success',
        ];
    }

Все работает отлично, но выводит все категории, а не активные.

В модели Category создал метод
public function index() {
        return $this->where('actf', 1)->get();
}

Далее правлю ресурс
public function toArray($request) {
        return [
            'mainMenu'   => CategoryResource::collection([Category::class, 'index']),
            'navigation' => 2,
            'cities'     => 3,
            'status'     => 'success',
        ];
    }

И не работает. Кричит что не получает title

В ресурсе категории он нужен
public function toArray($request) {
        return [
            'title' => $this->title,
            'url'   => '/catalog/' . $this->url,
        ];
    }

Направьте на путь истинный. Что не так вызываю?
Конечно можно в InitialResource создать new Category() и вызвать метод index() но что-то чувствую, что не правильно это.
  • Вопрос задан
  • 753 просмотра
Пригласить эксперта
Ответы на вопрос 2
delphinpro
@delphinpro Куратор тега Laravel
frontend developer
Ну если вы все запрашиваете Category::all(), то вам все и выплевываются.
Запрашивайте только активные

'mainMenu'   => CategoryResource::collection(Category::where('enabled', true)->get()),


https://laravel.com/docs/8.x/eloquent#building-queries
Ответ написан
@jazzus
Удалить Initial. Удалить InitialResource. Ибо это не ресурс. Передавать данные через json response. Внутри которого CategoryResource. Для правильного запроса квери билдер метод where. Если хочется вызывать методом из модели делай scope. Без get в модели. Передавать, как написано в документации
CategoryResource::collection($categories);
Ответ написан
Ваш ответ на вопрос

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

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