postgresql -- Пример создания таблицы с внешним ключом (foreign key) с помощью миграции (Symfony)

Создание таблицы реализовано с помощью миграции Symfony4. Но если вам требуется чистый код SQL, не пугайтесь, - просто возьмите код, передаваемый в качестве аргумента методу addSql(). Его же можно напрямую вводить в консоли БД.

Собственно пример создания таблицы в PostgreSQL. Помимо непосредственно полей, создаются Constraint-ы (Primary key, foreign key) и Sequence (генератор последовательности).

<?php

declare(strict_types = 1);

namespace Application\Migrations;

use Doctrine\DBAL\Migrations\AbstractMigration;
use Doctrine\DBAL\Schema\Schema;

class Version20180424105725 extends AbstractMigration
{
    public function up(Schema $schema): void
    {
        $this->addSql('CREATE TABLE product_field ('
                . ' id INT NOT NULL,'
                . ' name character varying(255) DEFAULT NULL,'
                . ' value character varying(255) DEFAULT NULL,'
                . ' product_id INT DEFAULT NULL,'
                . ' created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL,'
                . ' updated_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL,'
                . ' CONSTRAINT product_field_primary_key PRIMARY KEY(id))');
        
        $this->addSql('CREATE SEQUENCE product_field_sequence START 1');
        
        $this->addSql('alter table if EXISTS ad_product_field
            ADD CONSTRAINT product_fields FOREIGN KEY (product_id) REFERENCES product(id) ON DELETE CASCADE;');
    }

    public function down(Schema $schema): void
    {
        $this->addSql('drop table ad_product_field');
    }
}

Источники