codeturn
@codeturn

Как правильно работать с данными?

Здравствуйте. Объясню на примере
Есть две таблицы:
-cats
-news

Есть страница новостей, на которой мы выводим все новости и названия категорий, в которых они лежат. Сначала я обрадовался, что в laravel есть такая штука, как Eloquent: Relationships, но после подключения метода hasOne увидел, что он просто делает дополнительный select. Стало понятно, что это не подходит и придется по старинке писать джойны.

Получился такой код:
Модель News
<?
    class News extends Model
    {
        static function getTop($limit) {
            return self::withCat()->orderByDesc('news.date_add')->limit($limit)->get(['news.*','cats.name as catName']);
        }
        
        static function withCat() {
            return self::query()->leftJoin('cats', 'cat_id', '=', 'cats.id');
        }
    }


На сколько это правильно?
Я использую statiс методы, для легкого обращения к классу: News::getTop(30), это нормально или может принести проблем в будущем и лучше создавать экземпляр класса и работать с ним?

Еще такой момент, что в джойнах приходится указывать названия таблиц, что по логике не совсем уместно, ведь они у нас уже указаны в Model->$table.
  • Вопрос задан
  • 389 просмотров
Решения вопроса 1
@Kostik_1993
PHP Backend Developer, Laravel, Yii, Vue, Node.js
Что плохого в том что делается select? Вы думаете что сделал запрос через Join вы упростите запрос?
Во первых и это самое главное вы теряете возможность работать с объектами.
Кстати если сделать News::with('cats')->get() то будет вообще супер, огонь, пушка

Не нужно никаких selft, static и т.д. нужно просто открыть доку и увидеть что есть scope запросы

P.S. я не слишком умный, просто мне моя религия позволяет читать документацию, а вам нет
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы