--- breadcrumb: - Guides - ORM summary-order: ;1 --- # Object-Relational Mapping ## Definition > **Object-relational mapping** (**ORM**, **O/RM**, and **O/R mapping tool**) in computer science is a programming > technique for converting data between incompatible type systems using object-oriented programming languages. This > creates, in effect, a "virtual object database" that can be used from within the programming language. There are both > free and commercial packages available that perform object-relational mapping, although some programmers opt to > construct their own ORM tools. > > In object-oriented programming, data-management tasks act on object-oriented (OO) objects that are almost always > non-scalar values. For example, an address book entry that represents a single person along with zero or more phone > numbers and zero or more addresses. This could be modeled in an object-oriented implementation by a "Person object" with > attributes/fields to hold each data item that the entry comprises: the person's name, a list of phone numbers, and a > list of addresses. The list of phone numbers would itself contain "PhoneNumber objects" and so on. The address-book > entry is treated as a single object by the programming language (it can be referenced by a single variable containing a > pointer to the object, for instance). Various methods can be associated with the object, such as a method to return the > preferred phone number, the home address, and so on. > > However, many popular database products such as SQL database management systems (DBMS) can only store and manipulate > scalar values such as integers and strings organized within tables. The programmer must either convert the object values > into groups of simpler values for storage in the database (and convert them back upon retrieval), or only use simple > scalar values within the program. Object-relational mapping implements the first approach. > > The heart of the problem involves translating the logical representation of the objects into an atomized form that is > capable of being stored in the database while preserving the properties of the objects and their relationships so that > they can be reloaded as objects when needed. If this storage and retrieval functionality is implemented, the objects are > said to be persistent. > > Source: [Wikipedia](https://en.wikipedia.org/wiki/Object-relational_mapping) ## Integration The default and recommended ORM integration for Berlioz is [**Hector ORM**](orm/hector.md). The **berlioz/hector-package** provides seamless integration: automatic configuration, event subscription with the framework event manager, cache management, debug console, and CLI commands. > **Note:** The Atlas ORM package (`berlioz/atlas-package`) that was available in version 2.x has been removed in > version 3.0. If you were using Atlas, you will need to migrate to Hector ORM or manage your ORM integration manually.