@Mr-Governor
Губернирую

Как пользоваться моделями?

Изучая Laravel, и MVC в общем, делаю сайт блог, в котором есть след. таблицы:
  • articles - статьи
  • article_tags - связь тегов со статьей
  • tags - теги
  • comments - комменты

5ec019aa036ce701283495.png

На главной странице нужно отображать множество статей и у каждой их них есть список тегов.
У меня нет опыта работы с моделями и сначала я сделал все обращения к БД в контроллере через запросы.
Выглядит выборка так:
return DB::select(
            'SELECT a.`id`, a.`Title`, a.`Text`, a.`create_at`, 
            
            (SELECT GROUP_CONCAT(\'<a href="/tag/\', t.id, \'">\', t.`name`, \'</a>\' SEPARATOR \'\') 
            FROM article_tags _t 
            INNER JOIN tags t ON _t.tag_id = t.id WHERE _t.article_id = a.id) AS `tags`
             
            FROM articles AS a 
            LIMIT '.($curPage-1)*$articlesOnPage.', '.$articlesOnPage);


Но ведь суть MVC гласит о разделении логики, и особенно обращение к БД через модели, значит мое решение не кошерно, и надо перенести все в модели.

Далее я не понимаю как правильно создать модели:
1) К каждой articles надо будет получать список тегов, нужно ли создавать модель таблицы article_tags, ведь эта таблица всего лишь связующая, или в моделе таблицы articles добавить метод типа getMyTags в котором описать тот же запрос?

2) Мне будет сложно описать запрос используя методы моделей или конструктора запросов, мне проще написать запрос в ручную. Обязательно ли пользоваться спец. методами в моделях?
  • Вопрос задан
  • 194 просмотра
Решения вопроса 1
seoperin
@seoperin
Full stack web developer. Laravel / Vue
1) Модели Article, Tag, Comment.
Для модели Article связи с тегами и с комментами, про связи читай тут
Для article_tags модель не нужна, и по лучше называть article_tag, так правильнее, в стиле laravel, подробнее например тут
2) Не обязательно, но в этом и есть плюшки фреймворка. Моделями простые запросы делаются намного быстрее, элегантнее, чем вручную.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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