Вопрос про модель в MVC

192
30 марта 2017, 22:32

Здравствуйте, я смотрел, как делают два разных человека сайт и так и не понял, откуда брать данные из БД в модели или контроллере? ну, т.е. в модели мы пишем табл из который будет выборка, это понятно.

Один человек делал так: в модели название табл и все. А выборку он делал уже в контроллере, например:

$feeds = Feedback::find()->orderBy('RAND()')->limit(4)->all();

А другой выборку делал в модели, а в контроллере уже обращался к методу того класса, пример:

$categories = Category::getCategoriesList();

Как правильно или как лучше и что лучше всего делать в модели?)))

Answer 1

Для примера возьмем ваш пример. Выводим $feeds = Feedback::find()->orderBy('RAND()')->limit(4)->all(); в контроллере и все работает. Завтра нужно тоже самое, но в другом контроллере (или методе)? Что тогда? Вот если мы создадим метод в модели, то сможем использовать все это и в других контроллерах.

public function getFeeds()
{
    return self::find()->orderBy('RAND()')->limit(4)->all();
}

Тут даже дело уже не в самом MVC, а в подходе к гибкости системы. Старайтесь всегда думать о том, что вдруг данный код понадобиться где-то ещё.

Я использую помимо моделей (Models) ещё и модели представления (ViewModels). Это очень удобно. Например есть модель Users:

class Users extends ActiveRecord
{
    public static function tableName()
    {
        return 'users';
    }
}

В данной модели я храню все методы, касаемо самого Yii (правила,связи, поведения и т.д.). Не засоряю данный класс. Для остальных же методов использую UsersViewModel:

class UsersViewModel extends Users
{
    public static function getAllUsers()
    {
        return Users::find()->all();
    }
}

Я привел для примера примитивный пример, но важна сама суть. Старайтесь всегда думать на шаг вперед, чтобы потом не возвращаться на 2 шага назад.

Лучшие практики MVC. На примере Yii

Answer 2

Все очень просто. Согласно правилам MVC - контроллер является посредником между view и моделью и по сему модель вызывает контроллер и уже из подгруженной модели передает данные. Сие есть правильно. А в модели нужно описывать связи с другими моделями или поведение этой модели.

READ ALSO
Вставить в код url адрес домена

Вставить в код url адрес домена

Помогите, пожалуйста в код ниже, вставить ROOT домен, не страницу нахождения а именно доменВставить нужно перед video/

236
Базы данных и php

Базы данных и php

Здравствуйте! подскажите пожалуйста как вывести таблицу из БД на страницу с помощью php, в БД несколько таблиц одна из которой содержит данные...

216
Перезаписать данные в таблице БД

Перезаписать данные в таблице БД

ЗдравствуйтеЕсть таблица в БД с 10к записями

238