руководство/2. Создание таблицы.md
Создание таблицы
Итак, в прошлой статье мы создали класс для работы с базой данных. Далее, мы научимся создавать таблицу в базе данных.
Перед созданием таблицы, нужно написать класс-модель, реализующий интерфейс IDBItem и с помощью атрибутов AutoIncrement, Check, Compare, ConvertToDB, DataType, DefaultValue, FieldName, ForeignKey, IgnoredInDB, NotNull, PrimaryKey и Unique настроить столбцы и поля.
Создадим далее макет класса, описывающего пользователя сайта.
<?php
namespace App\Models;
use goodboyalex\php_db_components_pack\attributes\AutoIncrement;use goodboyalex\php_db_components_pack\attributes\FieldName;use goodboyalex\php_db_components_pack\attributes\IgnoredInDB;use goodboyalex\php_db_components_pack\attributes\NotNull;use goodboyalex\php_db_components_pack\attributes\PrimaryKey;use goodboyalex\php_db_components_pack\attributes\Unique;use goodboyalex\php_db_components_pack\enums\DBOperation;use goodboyalex\php_db_components_pack\interfaces\IDBItem;
class User implements IDBItem
{
/**
* @var int $id Идентификатор пользователя.
*/
#[PrimaryKey, NotNull, AutoIncrement, FieldName('id'), Unique, IgnoredInDB(DBOperation::Insert)]
public int $id = 0;
/**
* @var string $name Имя пользователя.
*/
#[NotNull, FieldName('user_name')]
public string $name = '';
/**
* @var string $email Почта пользователя.
*/
#[NotNull, FieldName('user_mail'), Unique]
public string $email = '';
/**
* Конструктор.
*
* @param int $id Идентификатор пользователя
* @param string $name Имя пользователя
* @param string $email Адрес EMAIL
*/
public function __construct(int $id = 0, string $name = "", string $email = "") {
$this->id = $id;
$this->name = $name;
$this->email = $email;
}
}
Итак, у нас в таблице должно быть 3 столбца:
| id | user_name | user_mail |
|---|---|---|
| - | - | - |
Значения во всех столбцах, кроме user_name должны быть уникальными, во всех столбцах не пустыми, а первичным ключом таблицы является столбец id с автозаполнением.
Теперь давайте создадим таблицу user. Сперва давайте проверим, существует ли такая таблица в БД. В этом нам поможет метод table->isTableExist:
if ($db->->table->isTableExist('user'))
throw new PDOException("Ты чего это удумал? Таблица users уже существует!");
Итак, таблицы нет и мы можем воспользоваться методом table->createTable для её создания:
if (!$db->table->createTable('user', "\\App\\Models\\User"))
throw new PDOException("Ошибка создания таблицы: users");
Таблица создана.