Lably
Skip to content

Doctrine (PHP)

Object–relational mapping for PHP

  • 4 min read
  • 4 chapters

Related on Lably

Through Class (programming), SQL and Object-oriented programming

One of Doctrine's key features is the option to write database queries in Doctrine Query Language (DQL), an object-oriented dialect of SQL.

Developers of two major PHP frameworks, Symfony and Laminas have official out-of-the-box support for Doctrine, while 3rd party Doctrine packages are available for Laravel, CodeIgniter and others.

Usage demonstration

Entities in Doctrine 2 are lightweight PHP Objects that contain persistable properties. A persistable property is an instance variable of the entity that is saved into and retrieved from the database by Doctrine's data mapping capabilities via the Entity Manager - an implementation of the data mapper pattern:

<span id="mwGw"></span> <span class="nv" id="mwHA">$user</span> <span class="o" id="mwHQ">=</span> <span class="k" id="mwHg">new</span> <span class="nx" id="mwHw">User</span><span class="p" id="mwIA">();</span> <span class="nv" id="mwIQ">$user</span><span class="o" id="mwIg">-></span><span class="na" id="mwIw">name</span> <span class="o" id="mwJA">=</span> <span class="s2" id="mwJQ">"john2"</span><span class="p" id="mwJg">;</span> <span class="nv" id="mwJw">$user</span><span class="o" id="mwKA">-></span><span class="na" id="mwKQ">password</span> <span class="o" id="mwKg">=</span> <span class="s2" id="mwKw">"doe"</span><span class="p" id="mwLA">;</span> <span class="c1" id="mwLQ">//$entityManager is an instance of Doctrine\ORM\EntityManagerInterface, usually obtained through dependency injection</span> <span class="nv" id="mwLg">$entityManager</span><span class="o" id="mwLw">-></span><span class="na" id="mwMA">persist</span><span class="p" id="mwMQ">(</span><span class="nv" id="mwMg">$user</span><span class="p" id="mwMw">);</span> <span class="nv" id="mwNA">$entityManager</span><span class="o" id="mwNQ">-></span><span class="na" id="mwNg">flush</span><span class="p" id="mwNw">();</span> <span class="k" id="mwOA">echo</span> <span class="s2" id="mwOQ">"The user with id </span><span class="si" id="mwOg">$user->id</span><span class="s2" id="mwOw"> has been saved."</span><span class="p" id="mwPA">;</span>

Doctrine 1.x follows the active record pattern for working with data, where a class corresponds with a database table. For instance, if a programmer wanted to create a new "User" object in a database, they would no longer need to write SQL queries, but instead could use the following PHP code:

<span id="mwRA"></span> <span class="nv" id="mwRQ">$user</span> <span class="o" id="mwRg">=</span> <span class="k" id="mwRw">new</span> <span class="nx" id="mwSA">User</span><span class="p" id="mwSQ">();</span> <span class="nv" id="mwSg">$user</span><span class="o" id="mwSw">-></span><span class="na" id="mwTA">name</span> <span class="o" id="mwTQ">=</span> <span class="s2" id="mwTg">"john"</span><span class="p" id="mwTw">;</span> <span class="nv" id="mwUA">$user</span><span class="o" id="mwUQ">-></span><span class="na" id="mwUg">password</span> <span class="o" id="mwUw">=</span> <span class="s2" id="mwVA">"doe"</span><span class="p" id="mwVQ">;</span> <span class="nv" id="mwVg">$user</span><span class="o" id="mwVw">-></span><span class="na" id="mwWA">save</span><span class="p" id="mwWQ">();</span> <span class="k" id="mwWg">echo</span> <span class="s2" id="mwWw">"The user with id </span><span class="si" id="mwXA">$user->id</span><span class="s2" id="mwXQ"> has been saved."</span><span class="p" id="mwXg">;</span>

Sign in to keep reading

3 more chapters are free with a Lably account.

More in Computing and communication