Yii2 создание блога (Часть 2 – проектирование БД, CRUD)

В этой статье будет освещено создание таблиц в БД и создание моделей необходимых для дальнейшей работы.

Для начала создадим три таблицы:

Категории блога:

CREATE TABLE `tbl_category` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,

  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Пользователи блога, они же авторы:

CREATE TABLE `tbl_user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `login` varchar(40)  NOT NULL,
  `password` varchar(100) NOT NULL,
  `email` varchar(100)  NOT NULL,
  `nickname` varchar(255)  NOT NULL,
  `about` text,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Посты блога:

CREATE TABLE `tbl_post` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255)  NOT NULL,
  `anons` text,
  `content` mediumtext,
  `category_id` int(10) unsigned DEFAULT NULL,
  `author_id` int(10) unsigned DEFAULT NULL,
  `publish_status` enum('draft','publish') NOT NULL DEFAULT 'draft',
  `publish_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

  PRIMARY KEY (`id`),
  CONSTRAINT `FK_post_category` FOREIGN KEY (`category_id`) REFERENCES `tbl_category` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `FK_post_author` FOREIGN KEY (`author_id`) REFERENCES `tbl_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

База данных готова, переходим к созданию моделей. В этом нам поможет Yii code generator: http://localhost/index.php?r=gii

После перехода в Yii code generator выбираем раздел “Model generator”. В открывшейся форме выставляем опцию использования префикса таблиц: “Use Table Prefix”. В поля “Table Name” и “Model Class” поочерёдно вводим имена таблиц и имена генерируемых классов и жмите кнопку генерировать:

tbl_category: Category
tbl_user: User
tbl_post: Post

Note: во время генерации модели User перезапишите имеющийся файл User.php

На выходе генератора получаем классы представляющие модели для таблиц в БД.

После того, как модели готовы переходим к CRUD (Create, Read, Update, Delete) generator’у. Он поможет в создании базовых контроллеров и представлений CRUD интерфейса. Здесь нам потребуется заполнить два поля “Model Class” и “Controller Class”. В “Model Class” вписываем имя модели (с указанием namespace) для которой будем генерировать CRUD. В “Controller Class” вписываем имя генерируемого контроллера (с указанием namespace). Например для постов это выглядит следующим образом:

"Model Class": app\models\Post
"Controller Class": app\controllers\PostController

Просмотреть результат, например для пользователей, можно перейдя по адресу http://localhost/index.php?r=user