Yii2 создание модели на основе таблицы базы данных

В данной статье рассмотрим создание класса модели в Yii2 на основе существующей таблицы базы данных, а так же пред и постобработку данных для операций сохранения и удаления.

Итак, предположим нам необходимо хранить данные о какой-либо продукции. Для продукции определены следующие характеристики:

  • название;
  • стоимость;
  • описание.

Код создания таблицы базы данных (на примере MySql) будет выглядеть следующим образом:

create table production (

	id int not null auto_increment, # код записи, числовое поле, автоинкремент

	name text not null, # название продукции, текстовое поле, не может быть null

	price double not null, # стоимость продукции, числовое поле двойной точности, не может быть null

	description text, # описание продукции, текстовое поле, может быть null

	primary key (id) # поле id - первичный ключ

) Engine=InnoDb;

Для создания класса модели воспользуеися инструментом кодогенерации gii, по умолчанию присутствующем в Yii2. В Gii нужно перейти в пункт "Model Generator", после чего заполнить поле "Table Name", причем в процессе ввода символов появится выпадающий список с перечнем таблиц в базе данных, в назании которых присутствует введенная строка. Поле "Model Class Name" заполнится автоматически на основе имени таблицы базы данных, однако его можно скорректировать. Так же можно скорректировать другие настройки создаваемого класса, например пространство имен, базовый класс, генерацию зависимостей и т.д. Итак, после того как все настройки выполнены, нужно нажать кнопку "Prewiev", после чего можно будет просмотреть код создаваемого класса. Для продолжения создания класса необходимо нажать конпку "Generate". В итоге будет создан файл Production.php в папке models (при условии настроек по умолчанию при создании класса) со следующим содержимым:

<?php

namespace app\models;

use Yii;

/**
 * This is the model class for table "production".
 *
 * @property int $id
 * @property string $name
 * @property double $price
 * @property string $description
 */
class Production extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'production';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['name', 'price'], 'required'],
            [['name', 'description'], 'string'],
            [['price'], 'number'],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'name' => 'Name',
            'price' => 'Price',
            'description' => 'Description',
        ];
    }
}

По умолчанию в классе создаются три метода:

  1. tableName - возвращает строку с именем таблицы базы данных. Например, если будет изменено имя таблицы базы, достаточно поменять возвращаемое этой функцией значение.
  2. rules - возвращает массив правил, в котором описаны типы данных полей, являются ли поля обязательными, значения по умолчанию и многое другое.
  3. attributeLabels - возвращает массив с соответствием поля и его метки. По умолчанию - названия полей с заглавной буквы, можно заменить на собственные названия, например: "Description" изменить на "Описание".

Сгенерированный класс уже готов к работе, можно получать данные, создавать, редактировать и удалять продукцию:

app\models\Production::find()->all() // получаем всю продукцию

//

$product = app\models\Production::find()->where(['id' => 1])->one() // получить продукт с id = 1

$product->description = "Новое описание продукта"; // меняем описание продукта

$product->save(); // сохраняем продукт

//

$product->remove(); // удаляем продукт

//

$newProduct = new app\models\Production(); // создаем новый продукт

$newProduct->name = "Новый продукт"; 

$newProduct->price = 120;

$newProduct->save(); // сохраняем новый продукт

На этом закончу данную статью и подведу итоги.

Итак, в статье рассмотрен процесс создания класса модели php фреймворка Yii2 на основе существующей таблицы базы данных с использованием инструмента кодогенерации Gii. Далее приведен пример созданного файла с кодом модели, описаны созданные по умолчанию методы.

 

Часть 0. Создание модели на основе таблицы базы данных

Часть 1. Базовая настройка REST API Yii2, создание модуля и контроллера