In this appendix, we've provided the overview of Doctrine library architecture and components. Doctrine is a large project consisting of multiple components mainly targeted on data persistence.
On the market, there are two big groups of database management systems: traditional relational databases and so called NoSQL databases. Although most relational databases use SQL language for querying and manipulating data, each particular database system has its own specific features. The same thing can be seen with NoSQL databases, where each system provides its own custom method for accessing data. Doctrine is designed to work with data in database-agnostic way by providing sophisticated abstraction layers.
The most useful component of Doctrine, Object Relational Mapper (ORM) is designed to let the developer an ability to work with data in object oriented way. This is when instead of writing an SQL query, you load an entity object (or an array of entity objects) from a repository. With this approach, a database table is mapped to a PHP class (also called an entity), and a row from that table is mapped to an instance of that entity class.