PavelUstyugov
@PavelUstyugov
php

Можно ли обойтись static функциями в laravel?

бэкэнд на Laravel используется для выдачи выборок для api.
Обычная схема:
на роут подается маршрут
в контроллере появляется функция с телом
return response()->json([
            'error' =>'OK',
            'product' => Product::getProductById( $id )
        ]);
в моделе функция
static function getProductById ($id )
  return Product::whereId($id)->first()
...
Правильный ли это подход? Ведь просто. Вся модель состоит из static функций, которые просто выдают выборку в зависимости от входящих параметров.

В чем минусы данного подхода?
  • Вопрос задан
  • 180 просмотров
Пригласить эксперта
Ответы на вопрос 3
aleksejjjj
@aleksejjjj
Но зачем вы берёте фреймворк, если поверх пишете собственную реализацию готовых методов?

// Вариант из коробки
public function show(Product $product)
{
    return response()->json([
         'error' => 'OK', // Это излишне, код ответа уже 200/ОК
         'product' => $product
    ]);
}

// Ваш
// Какого - то хрена отказываемся от стандартного биндинга,
// Пишем свой корявый метод в КАЖДОЙ МОДЕЛИ
// Вместо логичного 404 ответа получаем 200 и null
// И разгребаем всю эту херню на фронте. Которую сами и придумали. Зачем?

У вас не просто static функция, у вас ненужная, бессмысленная херня. Не стоит ей заменять работаюшие методы Laravel.
Ответ написан
darakanoit
@darakanoit
Веб-разработчик
Вы из модели делаете репозиторий, они потом будут такими жирными, что никто не будет понимать "что\куда\зачем", а помимо этих выборок в ней лежат релейшены\константы.
Если вам прям так нужны getProductById (хотя смысла в репозитории с элеквентом, ну хз), то создаёте "слой репозииторий" и его внедряете через DI в контроллер\класс и используете.
И советую возвращать Laravel API Resouce.
Ответ написан
palkan_karabov
@palkan_karabov
PressF1
Ваш getProductById равен стандартному find
Ответ написан
Ваш ответ на вопрос

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

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