PHPackages                             falseclock/dbd-php-entity - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. falseclock/dbd-php-entity

ActiveLibrary[Database &amp; ORM](/categories/database)

falseclock/dbd-php-entity
=========================

DTO like library to fetch any data in an Object-Oriented manner (ORM)

3.1.6(1y ago)69.3k↓36.1%3[1 PRs](https://github.com/Falseclock/dbd-php-entity/pulls)1Apache-2.0PHPPHP ^8.2

Since Sep 9Pushed 1y ago2 watchersCompare

[ Source](https://github.com/Falseclock/dbd-php-entity)[ Packagist](https://packagist.org/packages/falseclock/dbd-php-entity)[ RSS](/packages/falseclock-dbd-php-entity/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)Dependencies (3)Versions (28)Used By (1)

DBD-PHP-Entity
==============

[](#dbd-php-entity)

[![scrutinizer build](https://camo.githubusercontent.com/c3fb5311421fc32c81f342b2230073cf4422a5b26af9f0ec355e32a1d3542e90/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f46616c7365636c6f636b2f6462642d7068702d656e746974792f6261646765732f6275696c642e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/Falseclock/dbd-php-entity/?branch=master)[![Coverage Status](https://camo.githubusercontent.com/d0886aac5ad91224257b58bedc32e000b252d7fca1c2982814e77d2dcb2ded26/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f46616c7365636c6f636b2f6462642d7068702d656e746974792f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/github/Falseclock/dbd-php-entity?branch=master)[![PHP Version Require](https://camo.githubusercontent.com/db50d68b86e690a61408b7be78d2f4d8d19c7ff8c582d3e0d71a4e489bc9f2f5/687474703a2f2f706f7365722e707567782e6f72672f66616c7365636c6f636b2f6462642d7068702d656e746974792f726571756972652f706870)](https://packagist.org/packages/falseclock/dbd-php-entity)

[![Latest Stable Version](https://camo.githubusercontent.com/8e7d02179ebafbce53fd1e4113145695b635ac32b6bb98e0e9d66f3222a53b47/68747470733a2f2f706f7365722e707567782e6f72672f66616c7365636c6f636b2f6462642d7068702d656e746974792f76)](//packagist.org/packages/falseclock/dbd-php-entity)[![Total Downloads](https://camo.githubusercontent.com/80265ff4b028144d1ed38142b72d1d49501e8f7abf8c21bce8f6522e6d5360be/68747470733a2f2f706f7365722e707567782e6f72672f66616c7365636c6f636b2f6462642d7068702d656e746974792f646f776e6c6f616473)](//packagist.org/packages/falseclock/dbd-php-entity)[![Latest Unstable Version](https://camo.githubusercontent.com/3b655ca6d1f6b137c983c62bddc3e546a67a2af708dc1b8503e81ff47d6bc4af/68747470733a2f2f706f7365722e707567782e6f72672f66616c7365636c6f636b2f6462642d7068702d656e746974792f762f756e737461626c65)](//packagist.org/packages/falseclock/dbd-php-entity)[![License](https://camo.githubusercontent.com/229134d5c6efaad7e6b87057ee5d8327f0554ac983302181071e1a7da73cf860/68747470733a2f2f706f7365722e707567782e6f72672f66616c7365636c6f636b2f6462642d7068702d656e746974792f6c6963656e7365)](//packagist.org/packages/falseclock/dbd-php-entity)

**NOTICE**: readme находится в процессе написания.

Данная библиотека позволяет легко преобразовывать ассоциативные массивы в объекты по заранее предопределенным структурам (мапингу), иными словами реализует DTO. Изначально проект реализовывался как ORM библиотека, но не ограничивается этим. С помощью библиотеки можно описывать любые структурированные данные, а не только таблицы и их поля.

Принцип действия на пальцах
---------------------------

[](#принцип-действия-на-пальцах)

Представим, у вас есть таблица, с несколькими полями:

```
test=# select currency_id, currency_name, currency_short_name, currency_symbol,currency_code FROM currencies;
 currency_id |    currency_name    | currency_short_name | currency_symbol | currency_code
-------------+---------------------+---------------------+-----------------+---------------
         505 | Доллар США          | Доллар              | $               | USD
          36 | Казахстанский Тенге | Тенге               | ₸               | KZT
         506 | Российский Рубль    | Рубль               | ₽               | RUB
         548 | Евро                | Евро                | €               | EUR
(4 строки)

```

Данные из этой таблицы извлекаются через некий PDO и у вас есть именованный массив.

[![](tests/fixtures/array.png)](tests/fixtures/array.png)

Чтобы обращаться к элементам, вам явно нужно оказывать наименование поля:

```
$item['currency_name'];
$item['currency_symbol'];
```

Если заранее [создать маппинг](https://github.com/Falseclock/dbd-php-entity/blob/master/tests/DBD/Entity/Tests/Entities/Currency.php), то мы можем получит объект вместо именованного массива:

```
$objects = [];
foreach ($array as $item) {
    $objects[] = new Currency($item);
}
// обращаться к значениям теперь можно так:
$objects[0]->name;
$objects[0]->symbol;
```

[![](tests/fixtures/object.png)](tests/fixtures/object.png)

Это дает нам возможность не привязываться к наименованиям полей. Только ли для табличных данных подходит данная библиотека? Нет. Можно описывать любые структуры, например YAML файла или просто какие-то JSON данные. Нужны вложенные структуры? Нужны геттеры и сэттеры? Нужна предварительная конвертация данных? Это все есть, и даже больше. Можно контролировать целостность данных, вложенность структур, скрывать поля, если вы хотите отдавать их во внешную среду и много много чего другого. Поможет в вашем проекте? Тогда вперед с установки.

Установка
---------

[](#установка)

```
composer require falseclock/dbd-php-entity
```

Оглавление
----------

[](#оглавление)

#### Основные классы

[](#основные-классы)

- [Mapper](#Mapper)
- [Entity](#Entity)
- [View](#View)

#### Описание полей

[](#описание-полей)

- [Column](#Column)
- [Complex](#Complex)
- [Constraint](#Constraint)
- [Embedded](#Embedded)

#### Вспомогательные классы

[](#вспомогательные-классы)

- [Primitive](#Primitive)
- [Type](#Type)

#### Вспомогательные классы

[](#вспомогательные-классы-1)

- [FullEntity](#FullEntity)
- [FullMapper](#FullMapper)
- [OnlyDeclaredPropertiesEntity](#OnlyDeclaredPropertiesEntity)
- [StrictlyFilledEntity](#StrictlyFilledEntity)
- [SyntheticEntity](#SyntheticEntity)
- [MapperVariables](#MapperVariables)

---

**Mapper**
==========

[](#mapper)

Любое описание модели начинается с наследования этого абстрактного класса. Дочерний класс должен отвечать нескольким простым правилам:

1. Все переменные с типом `Column` объявляются как `public`.
2. Любые другие переменные кроме `Column`, объявляются как `protected`.
3. Класс не должен содержать `private` переменных.
4. Класс не должен иметь методы.
5. Константа `ANNOTATION` должна быть переопределена.
6. Название класса должно иметь тоже самое название что и основной класс `Entity` с постфиксом `Map`.
7. Оба класс `Entity` и `Mapper` должны быть в одном `namespace`.

#### Пример

[](#пример)

```
class City extends Entity {

}

class CityMap extends Mapper
{
    const ANNOTATION = "Data description";
}
```

Постфикс `Map`, при желании, можно переопределить через константу `Maper::POSTFIX`

Все потомки `Mapper` класса является синглтонами и вызываются через статичный метод [`me`](#me).

Публичные методы
----------------

[](#публичные-методы)

- [\_\_get](#__get)
- [findColumnByOriginName](#findColumnByOriginName)
- [getAllVariables](#getAllVariables)
- [getAnnotation](#getAnnotation)
- [getColumns](#getColumns)
- [getComplex](#getComplex)
- [getConstraints](#getConstraints)
- [getEmbedded](#getEmbedded)
- [getEntityClass](#getEntityClass)
- [getOriginFieldNames](#getOriginFieldNames)
- [getPrimaryKey](#getPrimaryKey)
- [getTable](#getTable)
- [getVarNameByColumn](#getVarNameByColumn)
- [me](#me)
- [meWithoutEnforcer](#meWithoutEnforcer)
- [name](#name)

---

### **\_\_get**

[](#__get)

\_\_get — магический метод для доступа к `protected` переменным класса.

#### Описание

[](#описание)

```
public __get(string $property): mixed
```

В некоторых случаях, при необходимости обращения к непубличным переменным в IDE, можно через phpdoc в заголовке класса прописать переменную через `@property`, которая доступна через магический метод. Если обратиться к несуществующей переменной, будет выброшено исключение.

#### Пример

[](#пример-1)

```
/**
 * Class MapperGet
 * @property Embedded $Regions
 * @property Complex $Address
 */
class MapperGet extends Mapper
{
    const ANNOTATION = "Data description";

    /** @var Embedded */
    protected $Regions = [
        Embedded::NAME => "country_regions",
        Embedded::ENTITY_CLASS => Region::class,
    ];

    /**  @var Complex */
    protected $Address = [
        Complex::TYPE => Address::class,
    ];
}
```

---

### **findColumnByOriginName**

[](#findcolumnbyoriginname)

findColumnByOriginName — получение экземпляра класса Column через ключ ассоциативного массива.

#### Описание

[](#описание-1)

```
public findColumnByOriginName(string $originName): Column
```

Может быть использован, если необходимо получить информацию о том как описывается то или иное `public` поле в `Mapper`классе.

---

### **getAllVariables**

[](#getallvariables)

getAllVariables — получение всех определенных переменных класса

#### Описание

[](#описание-2)

```
public getAllVariables(): MapperVariables
```

Полезная функция, если имеется необходимость на основании описания полей сформировать скрипт создания таблицы в реляционной базе.

---

### **getAnnotation**

[](#getannotation)

getAnnotation — получение константы `ANNOTATION`

#### Описание

[](#описание-3)

```
public getAnnotation(): string
```

---

### **getColumns**

[](#getcolumns)

getColumns — получение массива стандартных полей

#### Описание

[](#описание-4)

```
public getColumns(): array
```

Данная функция возвращает массив `Columns`, которые определены в Mapper классе. Следует помнить, что комплексные поля объявляются как `public`.

---

### **getComplex**

[](#getcomplex)

getComplex — получение массива комплексных полей

#### Описание

[](#описание-5)

```
public getComplex(): array
```

Данная функция возвращает массив `Complex`, которые определены в Mapper классе. Следует помнить, что комплексные поля объявляются как `protected`.

---

### **getConstraints**

[](#getconstraints)

getConstraints — получение массива ограничений

#### Описание

[](#описание-6)

```
public getConstraints(): array
```

Данная функция возвращает массив `Constraint`, которые определены в Mapper классе. Следует помнить, что ограничения объявляются как `protected`.

---

### **getEmbedded**

[](#getembedded)

getEmbedded — получение массива встроенных полей

#### Описание

[](#описание-7)

```
public getEmbedded(): array
```

Данная функция возвращает массив `Embedded`, которые определены в Mapper классе. Следует помнить, что встроенные поля объявляются как `protected`.

---

### **getEntityClass**

[](#getentityclass)

getEntityClass — получение класса, который использует данный маппинг

#### Описание

[](#описание-8)

```
public getEntityClass(): string
```

Следует осторожно использовать данную функцию, если вы не объявили `Entity` и `Mapper` в одном `namespace`

---

### **getOriginFieldNames**

[](#getoriginfieldnames)

getOriginFieldNames — получение массива объявленных `public` полей

#### Описание

[](#описание-9)

```
public getOriginFieldNames(): array
```

Данная функция возвращает ассоциативный массив, где ключ — наименование переменной класса `Mapper`, а значение — наименование поля.

###  Health Score

44

—

FairBetter than 92% of packages

Maintenance35

Infrequent updates — may be unmaintained

Popularity31

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity81

Battle-tested with a long release history

 Bus Factor1

Top contributor holds 98.3% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~76 days

Recently: every ~6 days

Total

25

Last Release

607d ago

Major Versions

v0.0.1 → 2.0.02020-10-26

2.4.0 → 3.0.02023-04-06

PHP version history (4 changes)1.1PHP ^7.1

2.2.0PHP ^7.1|^8.0

3.0.0PHP ^8.0

3.1.0PHP ^8.2

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/3299139?v=4)[Nurlan Mukhanov](/maintainers/Falseclock)[@Falseclock](https://github.com/Falseclock)

---

Top Contributors

[![Falseclock](https://avatars.githubusercontent.com/u/3299139?v=4)](https://github.com/Falseclock "Falseclock (173 commits)")[![dc-nispandiarov](https://avatars.githubusercontent.com/u/173662561?v=4)](https://github.com/dc-nispandiarov "dc-nispandiarov (3 commits)")

---

Tags

annotationdtoentitymappingsoopormphpsqldatabaseormentitymappingviewtabledtoannotationconstraintprimitivedbd

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/falseclock-dbd-php-entity/health.svg)

```
[![Health](https://phpackages.com/badges/falseclock-dbd-php-entity/health.svg)](https://phpackages.com/packages/falseclock-dbd-php-entity)
```

###  Alternatives

[propel/propel1

Propel is an open-source Object-Relational Mapping (ORM) for PHP5.

8481.6M87](/packages/propel-propel1)[vlucas/spot2

Simple DataMapper built on top of Doctrine DBAL

605392.8k7](/packages/vlucas-spot2)[liqueurdetoile/cakephp-orm-json

Cakephp plugin to provide easy control over JSON type fields in database

1461.1k](/packages/liqueurdetoile-cakephp-orm-json)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
