Doctrine 2’s console is really powerful when you know how to use it. You can generate entity classes and their method stubs, reverse-engineer a database, validate your entity schemas, and much more. In this post, I’m going to cover some of the Doctrine console’s more useful commands and explain how you can use them to reduce development time. For a full overview of the Doctrine 2 console, read the Doctrine Tools documentation.
orm:validate-schema
Validate that your mapping files are correct and that your database is in sync. Not only does it ensure that your database is up-to-date, it finds errors in your mapping files, detects invalid entity relationships, and even warns you when your naming conventions are inconsistent.
Usage: orm:validate-schema
Example output:
[Mapping] FAIL - The entity-class 'modelsAlbum' mapping is invalid:
* The mappings modelsAlbum#tracks and modelsSong#album are incosistent with each other.
[Mapping] FAIL - The entity-class 'modelsGenre' mapping is invalid:
* The field modelsGenre#related_genres is on the owning side of a bi-directional relationship, but the specified mappedBy association on the target-entity modelsGenre#
does not contain the required 'inversedBy' attribute.
[Mapping] FAIL - The entity-class 'modelsSong' mapping is invalid:
* The association modelsSong#album refers to the inverse side field modelsAlbum#songs which does not exist.
[Mapping] FAIL - The entity-class 'modelsSongFile' mapping is invalid:
* The association modelsSongFile#downloads is ordered by a foreign field COUNT(id) that is not a field on the target entity modelsDownload
[Database] FAIL - The database schema is not in sync with the current mapping file.
orm:convert-d1-schema
Convert a Doctrine 1 schema to Doctrine 2 format. This command can save you a lot of time and headaches when migrating projects from Doctrine 1 to Doctrine 2. The conversions I’ve tested are really accurate, but it would pay to check that everything looks okay after doing a conversion.
Usage: orm:convert-d1-schema from-path to-type dest-path
Example: orm:convert-d1-schema models/d1-models annotation models
In the above example, all of my Doctrine 1 schema files contained in ./models/d1-models
will be converted to Doctrine 2 annotation format and saved in ./models
. The original D1 schemas will not be modified.
orm:convert-mapping
Convert your mapping information between different formats. There probably aren’t many situations where you would need to convert your mapping information to a different format, but the feature that makes this command really useful is the --from-database
flag. Using the --from-database
flag allows you to essentially reverse-engineer a database by creating the mapping information from the database schema.
Usage: orm:convert-mapping to-type dest-path
Example: orm:convert-mapping --from-database annotation models/generated
The above example will read my database schema and create the entities with annotation mapping in my ./models/generated
directory. Omitting the --from-database
flag would cause the command to read my existing mapping information and convert it to annotation format in the ./models/generated
directory.
orm:generate-entities
Generate entity classes with getter and setter methods from your mapping information. The --regenerate-entities="1"
flag will cause your entities to be re-generated even if they exist already. You can also use the --generate-annotations
flag to automatically generate annotation metadata on your entities (only useful if your mapping information is not already in annotation format).
For a better idea of what this command can do, run orm:generate-entities --help
.
Usage: orm:generate-entities dest-path
Example: orm:generate-entities --generate-annotations="true" models/generated
This example will read my mapping information and create the entity classes in ./models/generated
. It will also generate annotation metadata for my entity classes.