Konfigurasi ORM
Setelah pembuatan domain selesai, baru kita memikirkan bagaimana cara menyimpan data ke database. Untuk melakukan itu, kita membuat konfigurasi ORM Doctrine dalam bentuk XML.
Konfigurasi Untuk Post
<?xml version="1.0" encoding="UTF-8"?>
<doctrine-mapping
xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xmlns:gedmo="http://gediminasm.org/schemas/orm/doctrine-extensions-mapping"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="App\Domain\Entity\Post">
<field
name="title"
type="string"
nullable="false" />
<field
name="content"
type="text"
nullable="false" />
<field
name="createdTime"
type="datetime"
nullable="false" />
<one-to-many
field="comments"
target-entity="App\Domain\Entity\Comment"
mapped-by="post"
index-by="id"
fetch="EXTRA_LAZY">
</one-to-many>
</entity>
</doctrine-mapping>
Umumnya, konfigurasi Doctrine akan mendefinisikan class repository. Namun kita tidak mendefinisikan repository di sini, karena kita akan menggunakan implementasi repositori buatan kita sendiri.
Di sini semua field-field adalah nama property dari class Post
, beserta
definisinya di database.
Doctrine akan secara otomatis memberikan nama tabel dan nama kolom yang sesuai
dengan konvensi yang digunakan. Untuk sistem kita, Doctrine akan menggunakan
snake case dengan prefix t_
untuk nama tabel, sehingga untuk entity Post
akan disimpan ke tabel t_post
.
Sedangkan untuk nama kolom menggunakan aturan sama, tetapi dengan prefix c_
.
Sehingga field title
akan disimpan ke kolom c_title
.
Konfigurasi Untuk Comment
<?xml version="1.0" encoding="UTF-8"?>
<doctrine-mapping
xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xmlns:gedmo="http://gediminasm.org/schemas/orm/doctrine-extensions-mapping"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="App\Domain\Entity\Comment">
<field
name="content"
type="text"
nullable="false" />
<field
name="createdTime"
type="datetime"
nullable="false" />
<many-to-one
field="post"
inversed-by="comments"
fetch="LAZY">
</many-to-one>
</entity>