Ответ 1
Рабочий процесс, который вы описываете с D1 и propel, в точности противоположно предпочитаемому способу мышления для Doctrine2. Фактически, я также избегал писать свои собственные определения баз данных в D1, в основном по тем же причинам, которые я приводил здесь:
В Доктрине 2 вас беспокоят прежде всего ваши сущности. Объекты - это просто простой PHP-объект, и доктрина просто управляет вашей персистентностью. Тот факт, что Doctrine находится за кулисами, сбрасывая данные в какой-либо базе данных, является практически запоздалой мыслью. Весь этот беспорядок - это именно то, что вы должны абстрагироваться! В теории вы могли бы избавиться от доктрины в какой-то будущей дате и написать свою собственную логику персистентности. Ваши объекты будут работать так же, как и всегда.
Глядя на это так, начиная с схемы базы данных, это просто глупо. Вас больше интересуют ваши сущности и бизнес-логика, встроенные в них и вокруг них. Этот вкусный суп!
Теперь, поскольку вы используете доктрину для сохранения ваших сущностей, она (вероятно) имеет смысл хранить данные сопоставления прямо там с определениями классов.
Итак, ваш новый рабочий процесс:
- Создайте некоторые объекты, определив некоторые простые PHP-классы с ванильным интерфейсом.
- Отметьте определения классов с помощью некоторых причудливых комментариев для доктрины пережевывать.
-
./doctrine orm:schema:create
и пусть доктрина беспокоится о определения таблиц базы данных.
Теперь, если у вас есть некоторая устаревшая база данных, все становится сложнее и намного менее забавно. Я не рассматривал этот сценарий с D2, но я думаю, что это уродливо.
Что касается кода Boilerplate: Я вижу, что люди жалуются на то, что нужно писать геттеры/сеттеры для своих объектов. Я делаю что-то подобное что делает этот парень - все мои сущности расширяют класс AbstractEntity, который использует магические методы для генерации getters/seters для любых свойств, которые не имеют ручной работы из них. Как только вы это сделаете, практически нет котельной плиты.
В качестве альтернативы, в наши дни есть много инструментов, которые вычеркнут шаблон для вас (PHPStorm делает это, плагины для Sublime и т.д.). Это делает котельную пластину довольно безболезненной и имеет дополнительное преимущество, заключающееся в том, что вы можете добавлять подсказки типа, и ваш редактор может обеспечить удобное автозаполнение.