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

393

В данной статье рассмотрим создание класса модели в 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, создание модуля и контроллера

Новые статьи

Установка Webmin для Armbian (Orange Pi / Raspberry Pi)
Установка Webmin для Armbian (Orange Pi / Raspberry Pi)

Установка webmin для операционной системы Armbian (Orange Pi / Raspberry Pi). Install webmin for armbian.

Читать далее...
Текстовое поле с выпадающими подсказками при вводе текста C# WPF XAML
Текстовое поле с выпадающими подсказками при вводе текста C# WPF XAML

Простая реализация текстового поля с выпадающими подсказками (аналогично поиску у Яндекс и Google) при вводе текста на языке C# WPF. Реализация пользовательского элемента управления в C#/

Читать далее...
Yii2 advanced доступ из backend к frontend кэшу
Yii2 advanced доступ из backend к frontend кэшу

В заметке описан способ доступа к фронтэнд (frontend) кэшу (cache) advanced приложения из бэкэнда (backend) для php фреймворка Yii2.

Читать далее...
C# паттерн проектирования Одиночка (Singleton)
C# паттерн проектирования Одиночка (Singleton)

Обзор и пример использования шаблона (паттерна) проектирования Одиночка (Singleton) на языке программирования C# (си шарп), достоинства и недостатки паттерна проектирования Синглтон

Читать далее...
Orange Pi / Raspberry Pi - установка и настройка Django в Linux Armbian
Orange Pi / Raspberry Pi - установка и настройка Django в Linux Armbian

Описание процесса установки и настройки python фреймворка django на одноплатных мини компьютерах orange pi / raspberry pi в операционной системе Linux Armbian.

Читать далее...

Это интересно

Текстовое поле с выпадающими подсказками при вводе текста C# WPF XAML
Текстовое поле с выпадающими подсказками при вводе текста C# WPF XAML

Простая реализация текстового поля с выпадающими подсказками (аналогично поиску у Яндекс и Google) при вводе текста на языке C# WPF. Реализация пользовательского элемента управления в C#/

Читать далее...
Yii2 advanced доступ из backend к frontend кэшу
Yii2 advanced доступ из backend к frontend кэшу

В заметке описан способ доступа к фронтэнд (frontend) кэшу (cache) advanced приложения из бэкэнда (backend) для php фреймворка Yii2.

Читать далее...
C# паттерн проектирования Одиночка (Singleton)
C# паттерн проектирования Одиночка (Singleton)

Обзор и пример использования шаблона (паттерна) проектирования Одиночка (Singleton) на языке программирования C# (си шарп), достоинства и недостатки паттерна проектирования Синглтон

Читать далее...
Yii2 установка и настройка advanced приложения
Yii2 установка и настройка advanced приложения

Описание процесса установки и настройки advanced приложения php фреймворка Yii2 с использование composer, рассмотрены возможные "подводные камни", возникающие при установке и настройке Yii2 advanced

Читать далее...
Подключение инфракрасного (ИК) пульта к Arduino
Подключение инфракрасного (ИК) пульта к Arduino

Описание процесса подключения инфракрасного дистанционного пульта управления к arduino, пример arduino скетча для работы с инфракрасным дистанционным пультом

Читать далее...