falseclock/dbd-php-entity
Composer 安装命令:
composer require falseclock/dbd-php-entity
包简介
DTO like library to fetch any data in an Object-Oriented manner (ORM)
README 文档
README
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 и у вас есть именованный массив.
Чтобы обращаться к элементам, вам явно нужно оказывать наименование поля:
$item['currency_name']; $item['currency_symbol'];
Если заранее создать маппинг, то мы можем получит объект вместо именованного массива:
$objects = []; foreach ($array as $item) { $objects[] = new Currency($item); } // обращаться к значениям теперь можно так: $objects[0]->name; $objects[0]->symbol;
Это дает нам возможность не привязываться к наименованиям полей. Только ли для табличных данных подходит данная библиотека? Нет. Можно описывать любые структуры, например YAML файла или просто какие-то JSON данные. Нужны вложенные структуры? Нужны геттеры и сэттеры? Нужна предварительная конвертация данных? Это все есть, и даже больше. Можно контролировать целостность данных, вложенность структур, скрывать поля, если вы хотите отдавать их во внешную среду и много много чего другого. Поможет в вашем проекте? Тогда вперед с установки.
Установка
composer require falseclock/dbd-php-entity
Оглавление
Основные классы
Описание полей
Вспомогательные классы
Вспомогательные классы
- FullEntity
- FullMapper
- OnlyDeclaredPropertiesEntity
- StrictlyFilledEntity
- SyntheticEntity
- MapperVariables
Mapper
Любое описание модели начинается с наследования этого абстрактного класса. Дочерний класс должен отвечать нескольким простым правилам:
- Все переменные с типом
Columnобъявляются какpublic. - Любые другие переменные кроме
Column, объявляются какprotected. - Класс не должен содержать
privateпеременных. - Класс не должен иметь методы.
- Константа
ANNOTATIONдолжна быть переопределена. - Название класса должно иметь тоже самое название что и основной класс
Entityс постфиксомMap. - Оба класс
EntityиMapperдолжны быть в одномnamespace.
Пример
class City extends Entity { } class CityMap extends Mapper { const ANNOTATION = "Data description"; }
Постфикс Map, при желании, можно переопределить через константу Maper::POSTFIX
Все потомки Mapper класса является синглтонами и вызываются через статичный метод me.
Публичные методы
- __get
- findColumnByOriginName
- getAllVariables
- getAnnotation
- getColumns
- getComplex
- getConstraints
- getEmbedded
- getEntityClass
- getOriginFieldNames
- getPrimaryKey
- getTable
- getVarNameByColumn
- me
- meWithoutEnforcer
- name
__get
__get — магический метод для доступа к protected переменным класса.
Описание
public __get(string $property): mixed
В некоторых случаях, при необходимости обращения к непубличным переменным в IDE, можно через phpdoc в заголовке класса
прописать переменную через @property, которая доступна через магический метод. Если обратиться к несуществующей
переменной, будет выброшено исключение.
Пример
/** * 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 — получение экземпляра класса Column через ключ ассоциативного массива.
Описание
public findColumnByOriginName(string $originName): Column
Может быть использован, если необходимо получить информацию о том как описывается то или иное public поле в Mapper
классе.
getAllVariables
getAllVariables — получение всех определенных переменных класса
Описание
public getAllVariables(): MapperVariables
Полезная функция, если имеется необходимость на основании описания полей сформировать скрипт создания таблицы в реляционной базе.
getAnnotation
getAnnotation — получение константы ANNOTATION
Описание
public getAnnotation(): string
getColumns
getColumns — получение массива стандартных полей
Описание
public getColumns(): array
Данная функция возвращает массив Columns, которые определены в Mapper классе. Следует помнить, что комплексные поля
объявляются как public.
getComplex
getComplex — получение массива комплексных полей
Описание
public getComplex(): array
Данная функция возвращает массив Complex, которые определены в Mapper классе. Следует помнить, что комплексные поля
объявляются как protected.
getConstraints
getConstraints — получение массива ограничений
Описание
public getConstraints(): array
Данная функция возвращает массив Constraint, которые определены в Mapper классе. Следует помнить, что ограничения
объявляются как protected.
getEmbedded
getEmbedded — получение массива встроенных полей
Описание
public getEmbedded(): array
Данная функция возвращает массив Embedded, которые определены в Mapper классе. Следует помнить, что встроенные поля
объявляются как protected.
getEntityClass
getEntityClass — получение класса, который использует данный маппинг
Описание
public getEntityClass(): string
Следует осторожно использовать данную функцию, если вы не объявили Entity и Mapper в одном namespace
getOriginFieldNames
getOriginFieldNames — получение массива объявленных public полей
Описание
public getOriginFieldNames(): array
Данная функция возвращает ассоциативный массив, где ключ — наименование переменной класса Mapper, а значение —
наименование поля.
falseclock/dbd-php-entity 适用场景与选型建议
falseclock/dbd-php-entity 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 10.11k 次下载、GitHub Stars 达 6, 最近一次更新时间为 2019 年 09 月 09 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「database」 「orm」 「view」 「annotation」 「mapping」 「entity」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 falseclock/dbd-php-entity 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 falseclock/dbd-php-entity 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 falseclock/dbd-php-entity 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Shoot aims to make providing data to your templates more manageable
Dibi is Database Abstraction Library for PHP
Kinikit - PHP Application development framework MVC component
Store your language lines in the database, yaml or other sources
PHP Database ORM for Symfony1. Do NOT use for new projects: please move to a newest Symfony release and Doctrine2
A package for automatically encrypting and decrypting Eloquent attributes in Laravel 5.5+, based on configuration settings.
统计信息
- 总下载量: 10.11k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 6
- 点击次数: 26
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: Apache-2.0
- 更新时间: 2019-09-09

