@@ -12,32 +12,86 @@ Metadata model. Up to very specific functionality of your database
12
12
system this allows you to generate SQL code that makes your Domain
13
13
model work.
14
14
15
- You will be pleased to hear, that Schema representation is
16
- completely decoupled from the Doctrine ORM though, that is you can
17
- also use it in any other project to implement database migrations
15
+ Schema representation is completely decoupled from the Doctrine ORM.
16
+ You can also use it in any other project to implement database migrations
18
17
or for SQL schema generation for any metadata model that your
19
- application has. You can easily generate a Schema, as a simple
20
- example shows:
18
+ application has. You can generate a Schema, as the example below
19
+ shows:
21
20
22
21
.. code-block :: php
23
22
24
23
<?php
25
- $schema = new \Doctrine\DBAL\Schema\Schema();
26
- $myTable = $schema->createTable("my_table");
27
- $myTable->addColumn("id", "integer", ["unsigned" => true]);
28
- $myTable->addColumn("username", "string", ["length" => 32]);
29
- $myTable->setPrimaryKey(["id"]);
30
- $myTable->addUniqueIndex(["username"]);
31
- $myTable->setComment('Some comment');
32
- $schema->createSequence("my_table_seq");
33
-
34
- $myForeign = $schema->createTable("my_foreign");
35
- $myForeign->addColumn("id", "integer");
36
- $myForeign->addColumn("user_id", "integer");
37
- $myForeign->addForeignKeyConstraint($myTable, ["user_id"], ["id"], ["onUpdate" => "CASCADE"]);
38
-
39
- $queries = $schema->toSql($myPlatform); // get queries to create this schema.
40
- $dropSchema = $schema->toDropSql($myPlatform); // get queries to safely delete this schema.
24
+
25
+ use Doctrine\DBAL\Schema\Column;
26
+ use Doctrine\DBAL\Schema\ForeignKeyConstraint;
27
+ use Doctrine\DBAL\Schema\ForeignKeyConstraint\ReferentialAction;
28
+ use Doctrine\DBAL\Schema\Index;
29
+ use Doctrine\DBAL\Schema\Index\IndexType;
30
+ use Doctrine\DBAL\Schema\PrimaryKeyConstraint;
31
+ use Doctrine\DBAL\Schema\Schema;
32
+ use Doctrine\DBAL\Schema\Table;
33
+
34
+ $user = Table::editor()
35
+ ->setUnquotedName('user')
36
+ ->addColumn(
37
+ Column::editor()
38
+ ->setUnquotedName('id')
39
+ ->setTypeName('integer')
40
+ ->setUnsigned(true)
41
+ ->create()
42
+ )
43
+ ->addColumn(
44
+ Column::editor()
45
+ ->setUnquotedName('username')
46
+ ->setTypeName('string')
47
+ ->setLength(32)
48
+ ->create()
49
+ )
50
+ ->addPrimaryKeyConstraint(
51
+ PrimaryKeyConstraint::editor()
52
+ ->setUnquotedColumnNames('id')
53
+ ->create()
54
+ )
55
+ ->addIndex(
56
+ Index::editor()
57
+ ->setUnquotedName('idx_username')
58
+ ->setUnquotedColumnNames('username')
59
+ ->setType(IndexType::UNIQUE)
60
+ ->create()
61
+ )
62
+ ->setComment('User table')
63
+ ->create();
64
+
65
+ $post = Table::editor()
66
+ ->setUnquotedName('post')
67
+ ->addColumn(
68
+ Column::editor()
69
+ ->setUnquotedName('id')
70
+ ->setTypeName('integer')
71
+ ->create()
72
+ )
73
+ ->addColumn(
74
+ Column::editor()
75
+ ->setUnquotedName('user_id')
76
+ ->setTypeName('integer')
77
+ ->create()
78
+ )
79
+ ->addForeignKeyConstraint(
80
+ ForeignKeyConstraint::editor()
81
+ ->setUnquotedName('fk_user_id')
82
+ ->setUnquotedReferencingColumnNames('user_id')
83
+ ->setUnquotedReferencedTableName('user')
84
+ ->setUnquotedReferencedColumnNames('id')
85
+ ->setOnUpdateAction(ReferentialAction::CASCADE)
86
+ ->create()
87
+ )
88
+ ->create();
89
+
90
+ $schema = new Schema([$user, $post]);
91
+ $schema->createSequence('my_table_seq');
92
+
93
+ $createSQL = $schema->toSql($myPlatform); // get queries to create this schema
94
+ $dropSQL = $schema->toDropSql($myPlatform); // get queries to drop this schema
41
95
42
96
Now if you want to compare this schema with another schema, you can
43
97
use the ``Comparator `` class to get instances of ``SchemaDiff ``,
0 commit comments