UUID как первичный ключ для Postgre

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
t3mnikov
Сообщения: 11
Зарегистрирован: 2017.02.03, 10:18

UUID как первичный ключ для Postgre

Сообщение t3mnikov »

Всем привет!
Подскажите как в Yii2 при создании миграции для первичного ключа новой таблицы указать тип данных UUID, СУБД PostgreSQL.
Заранее благодарю!
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: UUID как первичный ключ для Postgre

Сообщение yiiliveext »

Делаете трейт

Код: Выделить всё

trait UuidTypeTrait
{
    /**
     * @return Connection the database connection to be used for schema building.
     */
    abstract protected function getDb();

    /**
     * Creates a uuid column.
     * @return ColumnSchemaBuilder the column instance which can be further customized.
     */
    public function uuid()
    {
        return $this->getDb()->getSchema()->createColumnSchemaBuilder('uuid');
    }
}
Подключаете его в классе вашей миграции, используете как обычно.

Код: Выделить всё

$this->createTable('{{%user}}', [
            'id' => $this->uuid()->primaryKey(),
            'username' => $this->string()->notNull()->unique(),
            ]);
Не проверял, но должно работать.
t3mnikov
Сообщения: 11
Зарегистрирован: 2017.02.03, 10:18

Re: UUID как первичный ключ для Postgre

Сообщение t3mnikov »

Спасибо!
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: UUID как первичный ключ для Postgre

Сообщение yiiliveext »

t3mnikov писал(а): 2020.01.14, 11:35 Спасибо!
Хотя не, соврал немного. Вот так будет работать.

Код: Выделить всё

$this->createTable('{{%user}}', [
            'id' => $this->uuid(),
            'username' => $this->string()->notNull()->unique(),
            ]);
$this->addPrimaryKey('pk-user', '{{%user}}', 'id');            
Ответить