Від автора: вітаю вас, друзі. У цій статті ми продовжимо вивчення фреймворку Yii і познайомимося з поняттям Yii2 моделі. Вони, як ви пам’ятаєте, є ще одним компонентом шаблону MVC і відповідають за роботу з даними. Продовжимо?
Отже, в попередніх статтях ми з вами розібрали поняття контролера і виду. Ми створили свій перший контролер TestController з двома діями, створили види для цих сторінок і навіть передали деякі значення з контролера в вид. Однак, ці значення фактично були статичними, тобто ми їх визначили в контролері. До того ж, цих значень було не так багато.
На практиці ж ми працюємо з великими обсягами даних, які найчастіше зберігаються в базі даних. Ось тут нам і знадобиться третій компонент шаблону MVC — модель. Робота з БД — це, мабуть, основне призначення моделей. Всі файли даного компонента зберігаються в папці models.
За замовчуванням тут вже зберігається кілька моделей для роботи тестового додатку. Давайте почнемо створення своєї моделі, яка буде працювати зі статтями сайту. Припустимо, ми створюємо блог і на головній сторінці повинні виводитися статті.
Для початку нам знадобиться таблиця БД і в ній. Створимо тестову БД (я назву її 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
{
}
Нашу модель ми успадкували від класу 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.
Добре. А як тепер звернутися до БД і отримати всі статті з таблиці 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. Але перед тим, як працювати з даними у вигляді, давайте спробуємо зараз оновити сторінку.
Упс! Ми отримали повідомлення про невідомою базі yii2basic. Все правильно, адже ми поки що не налаштували підключення до створеної раніше БД. Давайте виправимо це. Для цього відкриємо ще один файл конфігурації — \config\db.php — і в ньому пропишемо необхідні налаштування підключення.
return [
‘class’ => ‘yii\db\Connection’,
‘dsn’ => ‘mysql:host=localhost;dbname=yii2_mini’,
‘username’ => ‘root’,
‘password’ => “,
‘charset’ => ‘utf8’,
];
Тепер можна спробувати ще раз оновити сторінку в браузері, якщо все зроблено вірно, тоді колишньої помилки вже бути не повинно. У наступній статті ми продовжимо роботу з моделями і даними, які вони нам надають. А на сьогодні у мене все. Більше про фреймворку ви можете дізнатися з наших безкоштовних або платних уроків.