Yii2 моделі. Частина 1

308

Від автора: вітаю вас, друзі. У цій статті ми продовжимо вивчення фреймворку Yii і познайомимося з поняттям Yii2 моделі. Вони, як ви пам’ятаєте, є ще одним компонентом шаблону MVC і відповідають за роботу з даними. Продовжимо?

Отже, в попередніх статтях ми з вами розібрали поняття контролера і виду. Ми створили свій перший контролер TestController з двома діями, створили види для цих сторінок і навіть передали деякі значення з контролера в вид. Однак, ці значення фактично були статичними, тобто ми їх визначили в контролері. До того ж, цих значень було не так багато.

На практиці ж ми працюємо з великими обсягами даних, які найчастіше зберігаються в базі даних. Ось тут нам і знадобиться третій компонент шаблону MVC — модель. Робота з БД — це, мабуть, основне призначення моделей. Всі файли даного компонента зберігаються в папці models.

Yii2 моделі. Частина 1

За замовчуванням тут вже зберігається кілька моделей для роботи тестового додатку. Давайте почнемо створення своєї моделі, яка буде працювати зі статтями сайту. Припустимо, ми створюємо блог і на головній сторінці повинні виводитися статті.

Для початку нам знадобиться таблиця БД і в ній. Створимо тестову БД (я назву її yii2_mini) і в ній одну таблицю для статей (назву її post).

CREATE TABLE IF NOT EXISTS `post` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`category_id` int(10) unsigned NOT NULL,
`title` varchar(255) NOT NULL,
`excerpt` varchar(255) NOT NULL,
`text` text NOT NULL,
`keywords` varchar(255) DEFAULT NULL,
`description` varchar(255) DEFAULT NULL,
`created` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Заповніть таблицю будь-якими тестовими даними. Її структура, думаю, зрозуміла:

id — ID статті;

category_id — посилання на категорію (якої належить стаття) майбутньої таблицю категорій;

title — назва статті;

excerpt — цитата статті (частина тексту статті для списку статей);

text — повний текст статті;

keywords — ключові слова;

description — мета-опис;

created — дата створення статті.

В принципі, стандартна таблиця, нічого особливого. Тепер створимо модель для роботи з цією таблицею. При створенні варто запам’ятати одне правило — в Yii їх прийнято називати на ім’я таблиці, у цьому випадку модель автоматично буде працювати з однойменною таблицею. Отже, клас ми назвемо Post:

namespace app\models;
use yii\db\ActiveRecord;
class Post extends ActiveRecord
{
}

Yii2 моделі. Частина 1

Нашу модель ми успадкували від класу yii\db\ActiveRecord, який надає нам зручний набір методів для роботи з БД. Йдемо далі. Коли ми хоти працювати зі статтями, тоді логічно було б створити відповідний контролер, щоб не працювати у тестовому. Давайте створимо контролер Post.

namespace app\controllers;
use yii\web\Controller;
class PostController extends Controller
{
public function actionIndex(){
return $this->render(‘index’);
}
}

Ну і, звичайно ж, необхідний вид — \views\post\index.php. У файлі конфігурації — \config\web.php — змінимо дефолтний маршрут, щоб на головній сторінці відображався саме майбутній список статей.

‘defaultRoute’ => ‘post/index’,

Якщо ви ніде не помилилися, тоді на головній сторінці повинні побачити результат роботи саме контролера Post.

Yii2 моделі. Частина 1

Добре. А як тепер звернутися до БД і отримати всі статті з таблиці post? Очевидно, для цього контролер повинен звернутися до моделі і її методів, які дозволять отримати потрібні дані. Зробити це можна, наприклад, таким чином:

namespace app\controllers;
use yii\web\Controller;
use app\models\Post;
class PostController extends Controller
{
public function actionIndex(){
$posts = Post::find()->all();
return $this->render(‘index’, compact(‘posts’));
}
}

Як бачимо, ми звернулися до класу по його імені — Post, і звернулися до деяких його методів. Фактично дана запис — Post::find()->all() — побудує такий запит: SELECT * FROM post. Отримані в змінну $posts дані ми віддаємо у вигляд \post\index.php. Але перед тим, як працювати з даними у вигляді, давайте спробуємо зараз оновити сторінку.

Yii2 моделі. Частина 1

Упс! Ми отримали повідомлення про невідомою базі yii2basic. Все правильно, адже ми поки що не налаштували підключення до створеної раніше БД. Давайте виправимо це. Для цього відкриємо ще один файл конфігурації — \config\db.php — і в ньому пропишемо необхідні налаштування підключення.

return [
‘class’ => ‘yii\db\Connection’,
‘dsn’ => ‘mysql:host=localhost;dbname=yii2_mini’,
‘username’ => ‘root’,
‘password’ => “,
‘charset’ => ‘utf8’,
];

Yii2 моделі. Частина 1

Тепер можна спробувати ще раз оновити сторінку в браузері, якщо все зроблено вірно, тоді колишньої помилки вже бути не повинно. У наступній статті ми продовжимо роботу з моделями і даними, які вони нам надають. А на сьогодні у мене все. Більше про фреймворку ви можете дізнатися з наших безкоштовних або платних уроків.