Skip to content

CreateTable

use Formal\AccessLayer\{
    Query\CreateTable,
    Table\Name,
    Table\Column,
};

$create = CreateTable::named(
    Name::of('users'),
    Column::of(
        Column\Name::of('username'),
        Column\Type::varchar(),
    ),
    Column::of(
        Column\Name::of('name'),
        Column\Type::varchar(),
    ),
);
$connection($create);

This query will fail if the table does exist, you can prevent this like so:

use Formal\AccessLayer\{
    Query\CreateTable,
    Table\Name,
    Table\Column,
};

$create = CreateTable::ifNotExists(
    Name::of('users'),
    Column::of(
        Column\Name::of('username'),
        Column\Type::varchar(),
    ),
    Column::of(
        Column\Name::of('name'),
        Column\Type::varchar(),
    ),
);
$connection($create);

Constraints

Primary key

You can specify the primary key of the table like so:

$create = CreateTable::named(
    Name::of('users'),
    Column::of(
        Column\Name::of('id'),
        Column\Type::int(),
    ),
);
$create = $create->primaryKey(Column\Name::of('id'));
$connection($create);

Foreign key

$create = CreateTable::named(
    Name::of('address'),
    Column::of(
        Column\Name::of('user'),
        Column\Type::int(),
    ),
    Column::of(
        Column\Name::of('address'),
        Column\Type::text(),
    ),
);
$create = $create->foreignKey(
    Column\Name::of('user'),
    Name::of('users'),
    Column\Name::of('id'),
);
$connection($create);

This will name the foreign key FK_user_id so it's easier to reference it afterwards.