MyTetra Share
Делитесь знаниями!
Как работать с полями AUTO_INCREMENT в PostgreSQL в Yii2
07.08.2017
22:45
Раздел: Компьютер - Программирование - Язык PHP - Yii2

Paul Mod


Особенность реализации PostgreSQL в том, что там нет понятия AUTO_INCREMENT у первичного ключа таблицы.

Уникальное значение идентификатора нужно определить заранее, а затем устанавливать его как обычное свойство модели.


Вот это не работает:


$user = new User();

$user->save();

$lastId = Yii::app()->db->getLastInsertID(); // <-- будет ошибка


Нужно так:


$nextId = Yii::app()->db->getLastInsertID('tbl_user_seq'); // взять последний номер в последовательности, он тут же увеличится и повторов не будет

$user = new User();

$user->id = $nextId; // явно назначить идентификатор

$user->save();


где tbl_user_seq - это последовательность (sequence), созданная специально для нумерации сущностей таблицы tbl_user. Последовательность должны быть инициализирована так же как и таблица


CREATE TABLE tbl_user ( --- таблица

id integer PRIMARY KEY

--- другие поля

);

CREATE SEQUENCE tbl_user_seq START 1; --- последовательность специально для таблицы tbl_user


Вот документация


* http://www.postgresql.org/d...

* http://www.postgresql.org/d...



Булат Камалов


Просто при создании таблицы надо указать у столбца id тип serial. Это аналог auto increment на mysql.



Paul Mod


Булат, ты прав. Так и есть. Сиквенс будет создан неявно. В коде Yii для PostgreSQL такой случай обрабатывается.

Надо мне почаще самому с PostgreSQL работать. Сейчас вообще нет ни одного проекта на нём.


Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования