Какой у вас опыт работы с Doctrine ORM?

Какой у вас опыт работы с доктрина? Я никогда не был сторонником ORM, я в основном управлял только базовым слоем абстракции db, таким как adodb.

Но я понял все концепции и преимущества этого. Поэтому, когда появился проект, в котором требовалась ORM, я подумал, что могу попробовать одну из структур ORM.

Мне нужно выбирать между доктриной и продвижением, поэтому я выбираю доктрину, потому что я не хотел выполнять требования phing.

Не знаю, что я сделал не так. Я пришел с правильным мышлением. И я ни в коем случае не «младший» php kiddie. Но я боролся с системой на каждом этапе пути. Документации много, но все кажется немного неорганизованным. А такие простые вещи, как YAML для создания таблицы db, просто не работают и просто срабатывают без ошибок или чего-то еще. Множество других вещей, которые работают немного в стиле фанк, требуют лишь дополнительной настройки перед тем, как приступить к работе.

Может быть, я сделал здесь какое-то мягкое или глупое предположение новичка, что как только я узнаю, что это, у меня будет момент ага. Но теперь я полностью ненавижу систему.

Может быть, есть несколько советов, которые кто-то может дать или, может быть, указать мне на хороший ресурс по этой теме или на какой-нибудь авторитетный сайт / человека по этому поводу? Или, может быть, просто порекомендуете другую структуру ORM, которая «просто работает»?

Святая корова! Древний наводящий на размышления вопрос с тысячами просмотров и десятком ответов, который НЕ был закрыт толпой Непродуктивных Вопросов !! А ++!

Theodore R. Smith 04.09.2014 02:48

Ну что ж, в конце концов они наверстали упущенное, просто им потребовалось время.

Dennis 24.02.2020 18:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
29
2
9 298
12

Ответы 12

Я не эксперт в Doctrine - я только начал ее использовать, и я должен признать, что это немного неоднозначный опыт. Он многое для вас делает, но не всегда сразу понятно, как сказать ему сделать то или это.

Например, при попытке использовать файлы YAML с автоматическим обнаружением отношений отношение «многие ко многим» не транслировалось правильно в определение модели php. Никаких ошибок, как вы упомянули, потому что он вообще не рассматривал его как многие-ко-многим.

Я бы сказал, что вам, вероятно, нужно время, чтобы обдумать тот или иной способ ведения дел и то, как элементы взаимодействуют друг с другом. И было бы хорошо иметь время, чтобы делать что-то пошагово, и решать проблемы по очереди в своего рода изоляции. Попытки сделать слишком много за один раз могут быть непосильными и затруднить поиск места, где что-то идет не так.

Я использую Doctrine в проекте среднего размера, где мне приходилось работать с уже существующими базами данных, которыми я не владею. Он дает вам множество встроенных функций, но у меня есть одна серьезная жалоба.

Поскольку мне приходилось генерировать свои модели из баз данных, а не наоборот, мои модели слишком близки к базе данных: поля имеют очень похожие имена на столбцы базы данных, чтобы получить объекты, которые вы должны запрашивать в том, что является важным sql (где поставить этот код и как его протестировать?) и т. д.

В конце концов, мне пришлось написать сложную оболочку для доктрины, которая заставляет меня задаться вопросом, не было бы проще просто использовать старый подход дао / модели и исключить доктрину из поля зрения. Жюри еще не решено. Удачи!

У нас есть существующая база данных, и некоторые из нас хотят использовать doctrine в 2020 году на mysql 5.6 и Windows. Каков твой вердикт сегодня?

surfmuggle 18.02.2020 08:07

мы используем Propel с Symfony 2 года и Doctrine с Symfony более 1 года. Могу сказать, что переход на ORM с фреймворком MVC был лучшим шагом, который мы сделали. Я бы порекомендовал придерживаться Doctrine, хотя на то, чтобы научиться с ней работать, нужно время. В конце концов, вы найдете свой код более читабельным и гибким.

Если вы ищете место, с чего начать, я бы порекомендовал Symfony Jobeet tutorial http://www.symfony-project.org/jobeet/1_4/Doctrine/en/ (главы 3, 6 посвящены основам) и, конечно же, документацию Doctrine.

Как я уже писал выше, мы уже некоторое время используем Doctrine. Чтобы сделать нашу работу более удобной, мы разработали инструмент под названием ORM Designer (www.orm-designer.com), в котором вы можете определить модель БД в графическом пользовательском интерфейсе (больше никаких файлов YAML :-), что, кстати, совсем неплохо. ). Вы также можете найти там несколько полезных руководств.

Отлично для орм-дизайнера. Хотелось бы, чтобы это было бесплатно: D

knagode 17.04.2013 14:25

Это похоже на ответ продавца. «Да, используйте doctrine2, а затем используйте наш собственный ORM Designer», да, это совершенно не предвзято.

AntonioCS 04.02.2015 06:41

Я не проверял ваш инструмент, но я полностью уверен, что наличие графического пользовательского интерфейса для вашей базы данных не заставляет вас действительно знать, что вы делаете. Пользовательский интерфейс подходит для простых задач, таких как управление контентом в cms. Однако для сложных вещей, таких как базы данных, изучите основы и примените их. SQL настолько чистый, простой и понятный. Зачем использовать промежуточное ПО? В какой-то момент он будет хуже оригинала в одном из следующих пунктов: документация, функции, скорость, сообщество.

agoldev 23.03.2018 22:07

Мой опыт похож на ваш. Я только начал использовать доктрину и никогда не использовал Propel. Однако я очень разочарован Доктриной. Это ужасная документация. Плохо организовано и довольно неполно.

Аминь, документы заставляют меня выколоть глаза. И сообщество Freenode IRC не очень помогает. Я обнаружил, что, унаследовав проекты, использующие Doctrine, она может стать оружием массового уничтожения в чужих руках.

ficuscr 04.10.2013 20:30

У меня смешанные чувства. Я мастер SQL только потому, что его так легко проверить. Вы можете быстро тестировать операторы SELECT, пока не получите правильные результаты. А провести рефакторинг совсем несложно.

В Doctorine или любой другой ORM существует так много уровней абстракции, что это почти кажется ОКР (навязчивым / компульсивным). В моем последнем проекте, в котором я опробовал Doctrine, я наткнулся на несколько стен. Мне потребовались дни, чтобы найти решение для чего-то, что, как я знал, я мог бы написать на SQL за считанные минуты. Это так расстраивает.

Я сварливый. Сообщество по SQL ОГРОМНО. Сообщество / поддержка Doctrine незначительна. Конечно, вы могли бы взглянуть на источник и попытаться разобраться в нем ... и это проблемы, на решение которых уйдут дни.

Итог: не пробуйте Doctrine или какой-либо ORM, не запланировав много времени для самостоятельного грокинга.

Если вы можете делать что-то быстрее в SQL, вы можете сделать это с помощью команды Doctrine Native SQL docs.doctrine-project.org/projects/doctrine-orm/en/latest/… и сохранить Doctrine для простых задач.

Craig 24.01.2017 23:18

Propel and Doctrine использует PDO. PDO имеет много открытых ошибок в Oracle Database. Все они связаны с полями CLOB. Помните об этом перед началом нового проекта, если вы работаете с Oracle. Ошибки открыты много лет назад. Doctrine и PDO будут аварийно завершены при работе с Oracle и CLOB

После некоторого исследования различных библиотек ORM для PHP я остановился на PHP ActiveRecord (см. ). Мое решение сводилось к минимальной конфигурации, легкости библиотеки и отсутствию генерации кода. Доктрина просто слишком сильна для того, что мне нужно; то, чего не делает PHP ActiveRecord, я могу реализовать в моем слое оболочки. Я бы посоветовал воспользоваться моментом и изучить ваши требования к ORM и посмотреть, предлагает ли простой, такой как PHP ActiveRecord, то, что вам нужно, или будет лучше реализована домашняя реализация активной записи.

Я думаю, что mtbikemike прекрасно резюмирует это: «Мне потребовалось несколько дней, чтобы найти решение для чего-то, что, как я знал, я мог бы написать на SQL за считанные минуты». Это тоже был мой опыт. SAD (медленная разработка приложений) гарантирована. Не говоря уже об уродливом коде и ограничениях за каждым углом. То, что должно занимать минуты, занимает дни, а то, что обычно было бы более сложным и занимало часы или дни, просто невыполнимо (или не стоит потраченного времени). Получающийся в результате код намного более подробный и загадочный (потому что нам действительно нужен другой язык запросов, DQL, чтобы сделать вещи еще менее удобочитаемыми). Странные ошибки встречаются повсюду, и большую часть времени они проводят, выслеживая их и сталкиваясь с ограничениями и проблемами. Доктрина (я использовал только v2.x) сродни бесполезному упражнению и абсолютно бесполезна. Это, безусловно, самый ненавистный компонент моей нынешней системы и действительно единственный, у которого есть огромные проблемы. Приступая к работе с новой системой, я всегда возвращаюсь от базы данных к классам сущностей, пытаясь выяснить, какое имя является правильным в разных местах кода. Полный кошмар.

Я не вижу ни одного плюса для Doctrine, только минусы. Я не знаю, почему он существует, и каждый день мне хочется, чтобы его не было (по крайней мере, в моих проектах).

Это все еще ваш опыт работы с Doctrine в 2015 году?

Dennis 06.10.2015 21:57

плюсы - автоматическая конвертация с SELECT в ваш DomainObject; автоматическая генерация схемы, проверка,

Dennis 09.06.2016 18:17

@ Деннис Сомневаюсь. Если он до сих пор пишет для каждой небольшой задачи / сайта вручную - преобразование из базы данных в объект или даже работает только с массивами ... Я действительно сомневаюсь, что он это делает так.

idchlife 20.12.2017 10:50

Использование Doctrine 2.5 в 2015 году. Похоже, все шло хорошо. Пока я не захотел использовать две сущности (в JOIN). [теперь лучше после того, как я познакомился с DQL]

Хорошо:

  • генерация SQL для меня
  • использование внешних ключей и ссылочная целостность
  • Генерация InnoDB по умолчанию
  • обновления, внесенные в SQL с помощью инструмента командной строки doctrine

Хорошо:

  • гипер-осведомленность об именовании и отображении, а также о том, как называть и как отображать сущности в фактические таблицы

Плохо

  • занимает много времени - изучение кастомного API построителя запросов. Или выяснить, как сделать простое СОЕДИНЕНИЕ, интересно, есть ли лучшие методы ... Простые СОЕДИНЕНИЯ, кажется, требуют написания пользовательских функций, если вы хотите выполнять объектно-ориентированные запросы.
  • [обновите первое впечатление выше] - я решил использовать DQL, так как он больше всего похож на SQL

Мне кажется, этот инструмент хорош по идее, но для его правильного выполнения требуется, чтобы разработчик потратил много времени на освоение. У меня возникает соблазн использовать его для генерации объектного SQL, но затем использовать PDO для фактического ввода / вывода. Только потому, что я еще не научился делать внешний ключ и ссылочную целостность с SQL. Но изучение этого кажется намного более простой задачей, чем изучение подробностей Doctrine даже с такими простыми вещами, как сущность, эквивалентная JOIN.

Доктрина в существующих проектах

Я (только начинаю) использовать Doctrine для разработки новых функций в существующем проекте. Поэтому вместо добавления новой таблицы mysql, например, для функции, я добавил сущности (которые создали таблицы для меня с помощью генерации схемы Doctrine). Я оставляю за собой право не использовать Doctrine для существующих таблиц, пока не познакомлюсь с ней лучше.

Если бы я использовал его на существующих таблицах, я бы сначала ... очистил таблицы, что включает в себя:

  • добавление столбца идентификатора, который является первичным / суррогатным ключом
  • с использованием InnoDb / таблицы с поддержкой транзакций
  • сопоставить его соответствующим образом с сущностью
  • запустите инструмент проверки Doctrine (doctrine orm:validate-schema)

Это потому, что Doctrine делает определенные предположения о ваших таблицах. И потому что вы, по сути, собираетесь управлять своими таблицами с помощью кода. Таким образом, ваш код и ваши таблицы должны соответствовать как можно большему соотношению 1: 1. Таким образом, Doctrine не подходит для любых таблиц "произвольной формы" в целом.

Но тогда вы могли бы с некоторой осторожностью и в некоторых случаях уйти с мелочами, такими как дополнительные столбцы, не учитываемые в ваших сущностях (я не думаю, что Doctrine проверяет, если вы этого не попросите). Вам нужно будет построить свои запросы знание, что вам сходит с рук. т.е. когда вы запрашиваете «объект» в целом, Doctrine запрашивает все поля объекта, в частности, по имени столбца. Если ваша фактическая схема содержит больше имен столбцов, я не думаю, что Doctrine будет возражать (это не так, как я подтвердил, создав дополнительный столбец в моей схеме).

Так что да, Doctrine можно использовать, но я бы начал с малого и осторожно. Скорее всего, вам придется преобразовать свои таблицы для поддержки транзакций и для начала иметь суррогатный индекс (первичный ключ). Для таких вещей, как внешние ключи и ссылочная целостность, вам придется работать с Doctrine, чтобы отшлифовать свои сущности и идеально сопоставить их. Возможно, вам придется позволить Doctrine перестроить вашу схему для использования ее собственных имен индексов, чтобы она могла правильно использовать FK и RI. По сути, вы передаете Doctrine некоторый контроль над своими таблицами, поэтому я считаю, что он должен знать схему по-своему (например, иметь возможность использовать свои собственные имена индексов и т. д.).

Вы используете его только для создания новых проектов? Я имею в виду в первую очередь использование Doctrine для создания базы данных. Я спрашиваю, потому что на самом деле я ищу мнения об использовании Doctrine в существующих ("сделанных вручную") базах данных, которые не обязательно правильно сформированы (таблицы без первичного ключа, большие таблицы, которые на самом деле должны быть двумя таблицами, и т.п. ). Насколько подходит Доктрина для такого случая?

Foo Bar 07.10.2015 21:34

Я добавил свой ответ в ответ

Dennis 07.10.2015 22:35

Спасибо. Я нахожусь в ситуации, когда я не могу изменить таблицы, к сожалению (мне нужно перенести данные из одной данной БД в другую данную БД с разными схемами). Так что я думаю, что Doctrine - неправильный инструмент. И использование Doctrine только для соединения с БД, но выполнение необработанного SQL приводит к поражению цели Doctrine.

Foo Bar 09.10.2015 21:16

Правда. За исключением необработанного SQL, вы будете выполнять необработанный DQL. (язык, который имеет дело с сущностями, а не с именами столбцов). Вы также можете использовать QueryBuilder для построения ваших запросов. Но да, вы столкнетесь с множеством проблем, особенно если ваши таблицы не поддерживают транзакции. Я вижу возможность использовать Doctrine для таблиц с поддержкой транзакций, где вы используете DQL или QueryBuilder и различные средства Doctrine, такие как параметризованные запросы и так далее. Но вы можете столкнуться с различными небольшими проблемами на каждом этапе процесса, например, с невозможностью управлять базой данных в первую очередь.

Dennis 09.10.2015 22:16

Спасибо = +1 за указание на run Doctrine validate tool (doctrine orm:validate-schema)

surfmuggle 18.02.2020 13:04

Использование Doctrine ORM в 2016 году с опытом работы ~ 2 - 2,5 года.

Внутренняя непоследовательность

SELECT i, p            
FROM \Entity\Item i
JOIN i.product p
WHERE ...

Предположим, что это Item и Product. Они связаны через Item.product_id с Product.id, а Product содержит Product.model, который мы хотим отображать вместе с Item.

Вот получение того же "product.model" из базы данных с использованием вышеуказанного SQL, но с различными параметрами SQL:

//SELECT i, p
$ret[0]->getProduct()->getModel();          

//SELECT i as item, p as product
$ret[0]['item']->getProduct()->getModel();  

//SELECT i as item, p.model as model
$ret[0]['model'];                           

Я хочу сказать следующее:

Структура Output ResultSet может кардинально измениться в зависимости от того, как вы пишете оператор DQL / ORM SELECT..

От массива объектов к массиву ассоциативного массива объектов, к массиву ассоциативного массива, в зависимости от того, как вы хотите SELECT. Представьте, что вам нужно внести изменения в свой SQL, а затем представить, что вам нужно вернуться к своему коду и заново выполнить весь код, связанный с чтением данных из набора результатов. Ой! Ой! Ой! Даже если это несколько строк кода, вы зависите от структуры набора результатов, нет полного стандарта развязки / общего стандарта.

В чем Доктрина хороша

В некотором смысле он устраняет необходимость в SQL, создании и обслуживании ваших собственных таблиц. Это не идеально. Иногда это терпит неудачу, и вам нужно перейти в командную строку MySQL и ввести SQL, чтобы настроить все до такой степени, чтобы Doctrine и вы были довольны, до которой Doctrine рассматривает типы столбцов как допустимые и где вы довольны типами столбцов. Вам не нужно определять свои собственные внешние ключи или индексы, это делается за вас автоматически.

В чем доктрина плохо

Всякий раз, когда вам нужно перевести любой значительно продвинутый SQL в DQL / ORM, вы можете столкнуться с трудностями. Помимо этого, вы также можете иметь дело с несоответствиями, подобными приведенному выше.

Последние мысли

Мне нравится Doctrine за создание / изменение таблиц для меня и за преобразование табличных данных в объекты и их сохранение обратно, а также за использование подготовленных операторов и других сдержек и противовесов, делающих мои данные более безопасными.

Мне нравится ощущение того, что Doctrine заботится о постоянном хранилище из объектно-ориентированного интерфейса PHP. У меня возникает болезненное ощущение, что я могу думать о своих данных как о части моего кода, а ORM позаботится о грязных вещах, связанных с взаимодействием с базой данных. База данных больше похожа на локальную переменную, и я понял, что если вы позаботитесь о своих данных, она вам ответит.

Я ненавижу Doctrine за ее непоследовательность и сложную кривую обучения, а также необходимость искать проприетарный синтаксис для DQL, когда я знаю, как писать что-то на SQL. Знания SQL легко доступны, у DQL нет такого количества экспертов в дикой природе, ни накопленных знаний (по сравнению с SQL), которые помогут вам, когда вы застряли.

к сожалению, в 2017 году я мало использовал Doctrine, хотя она все еще находится в кодовой базе. В основном потому, что мои тесты показали, что MySQLi - это быстрый, а Doctrine - медленный. Моя текущая кодовая база в основном написана с использованием около 1200 операторов чистого SQL, а теперь около 55 операторов Doctrine. Doctrine устраняет сложность в определенных случаях использования, например, мне не нужно отслеживать, что изменилось в моих объектах, когда я их обновляю, Doctrine позаботится об этом, когда я использую flush.

Dennis 09.08.2017 17:42

Я создал доступ к MySQL, подобный Doctrine, поэтому почти не имеет значения, какой из них я использую, поскольку синтаксис очень похож, и я могу легко использовать SQL. Итак, я использовал mysqli с моей собственной оболочкой.

Dennis 09.08.2017 17:42

Кроме того, большая часть моего SQL имеет от 2 до 6 предложений JOIN и странные крайние случаи, и я не хочу иметь дело с ними в Doctrine. Выполнение их в Doctrine - это «еще одна вещь, которую нужно выучить и поддерживать», и это непросто.

Dennis 09.08.2017 17:46

в основном избегая использования Doctrine в 2019/2020, используя MySQLi. У меня все еще есть связанный с Doctrine код, который я использую в некоторых классах репозитория, который все еще существует, но в последнее время не было написано ни одной новой Doctrine.

Dennis 19.02.2020 19:21

На данный момент я использую фреймворк Symfony с Doctrine ORM, как насчет использования Doctrine вместе с простыми запросами? Например, из knpuniversity я могу создать собственный метод репозитория, например:

     public function countNumberPrintedForCategory(Category $category)
    {
        $conn = $this->getEntityManager()
            ->getConnection();
        $sql = '
            SELECT SUM(fc.numberPrinted) as fortunesPrinted, AVG(fc.numberPrinted) as fortunesAverage, cat.name
            FROM fortune_cookie fc
            INNER JOIN category cat ON cat.id = fc.category_id
            WHERE fc.category_id = :category
            ';
        $stmt = $conn->prepare($sql);
        $stmt->execute(array('category' => $category->getId()));
        return $stmt->fetch();
... lines 30 - 37
    }

Я просто использую Doctrine Entities, например, создание форм обработки, Когда мне нужен более сложный запрос, я просто делаю простой оператор и беру нужные мне значения. В этом примере я также могу передать Entity как переменную и взять ее значения для выполнения запроса. Я думаю, что это решение легко понять, и на создание форм уходит меньше времени, передача данных для них и написание сложных запросов не так сложно, как их написание с помощью Doctrine.

Немного поздно на вечеринку, но позволь мне бросить сюда свои два цента. Я буду подключаться к Laravel, потому что это фреймворк, который я использую.

Active Record против сопоставления данных против правильного ООП

Laravel и многие другие фреймворки любят Активная запись. Это может быть отличным вариантом для простых приложений и сэкономит ваше время на тривиальное управление БД. Однако с точки зрения ООП это чистый антипаттерн. SoC только что убили. Он создает связь между атрибутами модели и именами столбцов SQL. Ужасно для расширений и будущих обновлений.

По мере роста вашего проекта (и да, так оно и будет!) ActiveRecord будет доставлять все больше и больше боли. Даже не думайте легко обновлять структуру SQL. Помните, что имена столбцов присутствуют во всем коде PHP.

Меня наняли для проекта, цель которого в будущем стать довольно крупным. Я видел пределы ActiveRecord. Я просидел 3 недели и переписал все, используя Data Mapper, который отделяет БД от вышеперечисленных слоев.

Теперь вернемся к Картограф данных и почему я не выбрал Доктрину.

Основная идея Картограф данных заключается в том, что он отделяет вашу базу данных от вашего кода. И это правильный подход с точки зрения ООП. Правила SoC! Я подробно рассмотрел Доктрина, и сразу несколько нюансов не понравились.

  • Отображение. Почему в мире кто-то может использовать комментарии как команды? Я считаю это крайне плохой практикой. Почему бы просто не использовать класс PHP для хранения отношений сопоставления?
  • Ямл или XML для карты. Опять же, почему ?? Зачем тратить время на синтаксический анализ текстовых файлов, если можно использовать обычный класс PHP. Кроме того, класс может быть расширен, унаследован, может содержать методы, а не только данные. И т.п.
  • Если у нас есть картограф и модель, передающая данные, то это должен быть картограф, хранящий модель. Такие методы, как $product->save(), просто не годятся. Модель обрабатывает данные, она не должна заботиться о сохранении чего-либо в БД. Это очень тесная связь. Если мы тратим время на создание картографа, то почему бы не иметь $mapper->save($product). По определению, картограф должен знать, как сохранять данные.

Такие инструменты, как Doctrine или Eloquent, несомненно, экономят время вначале. Но вот непростой вопрос для каждого индивидуально. Каков правильный компромисс между / временем разработки / будущими обновлениями / ценой / простотой / соблюдением принципов ООП /? В конце концов, вы должны ответить и принять правильное решение.

Мой собственный DataMapper вместо Doctrine

В итоге я разработал свой собственный DataMapper, и я уже использовал его для нескольких своих небольших проектов. Он работает очень красиво, его легко расширять и использовать повторно. В большинстве случаев мы просто настраиваем параметры, и новый код не требуется.

Вот основные принципы:

  • Модель переносит данные, аналогично модели Laravel. Пример переменной $model для следующих примеров.
  • ModelMap содержит поле, которое сопоставляет атрибуты модели со столбцами таблицы в базе данных SQL. ModelMaps знает имя таблицы, идентификатор и т. д. Он знает, какие атрибуты должны быть переданы в json, а какие атрибуты должны быть скрыты (например, deleted_at). Эта ModelMap содержит псевдонимы для столбцов с тем же именем (связанных таблиц). Пример переменной: $modelMap.
  • ModelDataMapper - это класс, который принимает Модель и ModelMap в контроллере и предоставляет функции store / getById / deleteById. Вы просто звоните $modelMapper->store($model) и все.
  • Базовый DataMapper также обрабатывает разбивку на страницы, возможность поиска, преобразование массивов в json, добавляет метки времени, проверяет мягкое удаление и т. д. Для простых целей достаточно базового DataMapper. Для чего-то более сложного его легко расширить с помощью наследования.

Мне нравится ваш подробный ответ с абстрактной точки зрения, вместо того, чтобы жаловаться на один вариант использования. Хотели бы вы поделиться своим персонализированным картографом данных? Я очень много вложился в Doctrine, но мне нравится рассматривать альтернативы, и ваше решение звучит интригующе.

Fodagus 05.02.2019 23:38

@Fodagus Спасибо! Я бы не прочь поделиться им, но я был слишком занят, чтобы сделать его отдельным пакетом на git. Я продолжаю копировать его из одного проекта в другой, что не является хорошим долгосрочным решением :) Я планирую создать пакет git где-нибудь в этом году. Проверьте мой профиль и свяжитесь со мной, я могу поделиться с вами некоторыми идеями и, возможно, еще и кодом.

Peter Matisko 06.02.2019 21:44

@PeterMatisko есть какие-нибудь обновления в вашем картографе данных? Спасибо

reformed 26.06.2019 09:09

@reformed, у меня это как отдельный пакет, но пока без особой документации. Свяжитесь со мной по linkedin или по электронной почте, я могу поделиться. У меня есть контакты в Интернете.

Peter Matisko 26.06.2019 12:13

Другие вопросы по теме