Skip to content

Commit 9ed3b06

Browse files
committed
[Doctrine] Deprecate the reverse engineering docs
1 parent f065b76 commit 9ed3b06

File tree

1 file changed

+7
-108
lines changed

1 file changed

+7
-108
lines changed

doctrine/reverse_engineering.rst

+7-108
Original file line numberDiff line numberDiff line change
@@ -4,114 +4,13 @@
44
How to Generate Entities from an Existing Database
55
==================================================
66

7-
When starting work on a brand new project that uses a database, two different
8-
situations can occur. In most cases, the database model is designed
9-
and built from scratch. Sometimes, however, you'll start with an existing and
10-
probably unchangeable database model. Fortunately, Doctrine comes with a bunch
11-
of tools to help generate model classes from your existing database.
7+
.. caution::
128

13-
.. note::
9+
The ``doctrine:mapping:import`` command used to generate Doctrine entities
10+
from existing databases was deprecated by Doctrine in 2019 and it's no
11+
longer recommended to use it.
1412

15-
As the `Doctrine tools documentation`_ says, reverse engineering is a
16-
one-time process to get started on a project. Doctrine is able to convert
17-
approximately 70-80% of the necessary mapping information based on fields,
18-
indexes and foreign key constraints. Doctrine can't discover inverse
19-
associations, inheritance types, entities with foreign keys as primary keys
20-
or semantical operations on associations such as cascade or lifecycle
21-
events. Some additional work on the generated entities will be necessary
22-
afterwards to design each to fit your domain model specificities.
13+
Instead, you can use the ``make:entity`` command from `Symfony Maker Bundle`_
14+
to quickly generate the Doctrine entities of your application.
2315

24-
This tutorial assumes you're using a simple blog application with the following
25-
two tables: ``blog_post`` and ``blog_comment``. A comment record is linked
26-
to a post record thanks to a foreign key constraint.
27-
28-
.. code-block:: sql
29-
30-
CREATE TABLE `blog_post` (
31-
`id` bigint(20) NOT NULL AUTO_INCREMENT,
32-
`title` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
33-
`content` longtext COLLATE utf8_unicode_ci NOT NULL,
34-
`created_at` datetime NOT NULL,
35-
PRIMARY KEY (`id`)
36-
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
37-
38-
CREATE TABLE `blog_comment` (
39-
`id` bigint(20) NOT NULL AUTO_INCREMENT,
40-
`post_id` bigint(20) NOT NULL,
41-
`author` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
42-
`content` longtext COLLATE utf8_unicode_ci NOT NULL,
43-
`created_at` datetime NOT NULL,
44-
PRIMARY KEY (`id`),
45-
KEY `blog_comment_post_id_idx` (`post_id`),
46-
CONSTRAINT `blog_post_id` FOREIGN KEY (`post_id`) REFERENCES `blog_post` (`id`) ON DELETE CASCADE
47-
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
48-
49-
Before diving into the recipe, be sure your database connection parameters are
50-
correctly set up in the ``.env`` file (or ``.env.local`` override file).
51-
52-
The first step towards building entity classes from an existing database
53-
is to ask Doctrine to introspect the database and generate the corresponding
54-
metadata files. Metadata files describe the entity class to generate based on
55-
table fields.
56-
57-
.. code-block:: terminal
58-
59-
$ php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/Entity
60-
61-
This command line tool asks Doctrine to introspect the database and generate
62-
new PHP classes with annotation metadata into ``src/Entity``. This generates two
63-
files: ``BlogPost.php`` and ``BlogComment.php``.
64-
65-
.. tip::
66-
67-
It's also possible to generate the metadata files into XML or eventually into YAML:
68-
69-
.. code-block:: terminal
70-
71-
$ php bin/console doctrine:mapping:import "App\Entity" xml --path=config/doctrine
72-
73-
In this case, make sure to adapt your mapping configuration accordingly:
74-
75-
.. code-block:: yaml
76-
77-
# config/packages/doctrine.yaml
78-
doctrine:
79-
# ...
80-
orm:
81-
# ...
82-
mappings:
83-
App:
84-
is_bundle: false
85-
type: xml # "yml" is marked as deprecated for doctrine v2.6+ and will be removed in v3
86-
dir: '%kernel.project_dir%/config/doctrine'
87-
prefix: 'App\Entity'
88-
alias: App
89-
90-
Generating the Getters & Setters or PHP Classes
91-
-----------------------------------------------
92-
93-
The generated PHP classes now have properties and annotation metadata, but they
94-
do *not* have any getter or setter methods. If you generated XML or YAML metadata,
95-
you don't even have the PHP classes!
96-
97-
To generate the missing getter/setter methods (or to *create* the classes if necessary),
98-
run:
99-
100-
.. code-block:: terminal
101-
102-
// generates getter/setter methods for all Entities
103-
$ php bin/console make:entity --regenerate App
104-
105-
// generates getter/setter methods for one specific Entity
106-
$ php bin/console make:entity --regenerate "App\Entity\Country"
107-
108-
.. note::
109-
110-
If you want to have a OneToMany relationship, you will need to add
111-
it manually into the entity (e.g. add a ``comments`` property to ``BlogPost``)
112-
or to the generated XML or YAML files. Add a section on the specific entities
113-
for one-to-many defining the ``inversedBy`` and the ``mappedBy`` pieces.
114-
115-
The generated entities are now ready to be used. Have fun!
116-
117-
.. _`Doctrine tools documentation`: https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/tools.html#reverse-engineering
16+
.. _`Symfony Maker Bundle`: https://symfony.com/bundles/SymfonyMakerBundle/current/index.html

0 commit comments

Comments
 (0)