Магазин на Yii2, часть 2. Создаем базу данных и классы моделей

03.05.2019

Теги: Web-разработкаYii2БазаДанныхИнтернетМагазинКаталогТоваровКлассМодельПрактикаФреймворк

Теперь создаем базу данных eshop и две таблицы — product и category. Таблица category описывает разделы каталога, а таблица product — товары каталога. Редактируем файл config/db.php, изменяем имя базы данных на eshop. И создаем классы моделей Category и Product в директории models.

--
-- Структура таблицы `category`
--
CREATE TABLE `category` (
  `id` int(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT 'Уникальный идентификатор',
  `parent_id` int(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Родительская категория',
  `name` varchar(255) NOT NULL COMMENT 'Наименование категории',
  `content` varchar(255) DEFAULT NULL COMMENT 'Описание категории',
  `keywords` varchar(255) DEFAULT NULL COMMENT 'Мета-тег keywords',
  `description` varchar(255) DEFAULT NULL COMMENT 'Мета-тег description',
  `image` varchar(255) DEFAULT NULL COMMENT 'Имя файла изображения'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Структура таблицы `product`
--
CREATE TABLE `product` (
  `id` int(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT 'Уникальный идентификатор',
  `category_id` int(10) UNSIGNED NOT NULL COMMENT 'Родительская категория',
  `brand_id` int(10) UNSIGNED NOT NULL COMMENT 'Идентификатор бренда',
  `name` varchar(255) NOT NULL COMMENT 'Наименование товара',
  `content` text COMMENT 'Описание товара',
  `price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT 'Цена товара',
  `keywords` varchar(255) DEFAULT NULL COMMENT 'Мета-тег keywords',
  `description` varchar(255) DEFAULT NULL COMMENT 'Мета-тег description',
  `image` varchar(255) DEFAULT NULL COMMENT 'Имя файла изображения',
  `hit` tinyint(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Лидер продаж?',
  `new` tinyint(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Новый товар?',
  `sale` tinyint(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Распродажа?'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Файл config/db.php:

<?php
return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=eshop',
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8',
];

Файл models/Category.php:

<?php
namespace app\models;

use yii\db\ActiveRecord;

class Category extends ActiveRecord {

    /**
     * Возвращает имя таблицы БД
     */
    public static function tableName() {
        return 'category';
    }

    /**
     * Возвращает товары категории
     */
    public function getProducts() {
        // связь таблицы БД `category` с таблицей `product`
        return $this->hasMany(Product::class, ['category_id' => 'id']);
    }

    /**
     * Возвращает родительскую категорию
     */
    public function getParent() {
        // связь таблицы БД `category` с таблицей `category`
        return $this->hasOne(self::class, ['id' => 'parent_id']);
    }

    /**
     * Возвращает дочерние категории
     */
    public function getChildren() {
        // связь таблицы БД `category` с таблицей `category`
        return $this->hasMany(self::class, ['parent_id' => 'id']);
    }
}

Файл models/Product.php:

<?php
namespace app\models;

use yii\db\ActiveRecord;

class Product extends ActiveRecord {

    /**
     * Возвращает имя таблицы БД
     */
    public static function tableName() {
        return 'product';
    }

    /**
     * Возвращает родительскую категорию
     */
    public function getCategory() {
        // связь таблицы БД `product` с таблицей `category`
        return $this->hasOne(Category::class, ['id' => 'category_id']);
    }
}

Поиск: Web-разработка • Yii2 • База данных • Интернет магазин • Класс • Фреймворк • Модель • ActiveRecord • Товар • Product • Категория • Category • Каталог товаров

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.