Symfony + Doctrine: Single mapping file for multiple entities (global mapping)
Doctrine lets you define database ORM mapping using YAML, XML or PHP Annotations. I wanted to put all my mapping information in a single file, in order to streamline updating for one or two of my own reasons.
I found this snippet:
<?php$namespaces = array('/path/to/files1' => 'MyProject\Entities','/path/to/files2' => 'OtherProject\Entities');$driver = new \Doctrine\ORM\Mapping\Driver\SimplifiedYamlDriver($namespaces);$driver->setGlobalBasename('global'); // global.orm.yml
Which is nice but we are not implementing the Doctrine driver ourselves when using Symfony 2.1, so I did a quick search for setGlobalBaseName
in the Symfony Doctrine ODM bundle and found that it was setting the global basename to mapping
and not global
.
So, if you wish to have a global YAML mapping definition file, you can create one like:
/www/src/Acme/TestBundle/Resources/config/doctrine/mapping.orm.yml
The mapping.orm.yml
file should look something like this:
Acme\TestBundle\Entity\Employee: type: entity tableName: employees fields: ref: { type: char(6), primary: true, notnull: true } first_name: { type: string(50), notnull: true } last_name: { type: string(50), notnull: true } birthdate: { type: timestamp, notnull: true } hiredate: { type: timestamp, notnull: true } email: { type: string(100), notnull: true } oneToOne: company: targetEntity: Company joinColumn: name: company_id referencedColumnName: idAcme\TestBundle\Entity\Company: type: entity tableName: companies fields: ref: type: char(6) primary: true notnull: true name: { type: string(50), notnull: true }
Then, we can generate the model classes (or entities) using:
$ php app/console doctrine:generate:entities TestBundle
This makes the Employee.php
and Company.php
in:
/www/src/Acme/TestBundle/Entity/
So there you have it, setting up a global YAML mapping file, and generating entity classes from it!
Hope this helps someone out there.