Ответ 1
DataMapper ORM и Doctrine следуют совершенно другому набору соглашений. ORM DataMapper (достаточно запутанный) не является устройством отображения данных, а активным исполнением записи. Это означает, что ваши классы моделей тесно интегрированы с библиотекой ORM. Ваши модели построены на встроенных моделях DataMapper. Вы получаете много магии бесплатно, но взамен вы вступаете в брак с вашими моделями в ORM DataMapper.
Доктрина, с другой стороны, использует истинный шаблон отображения данных. Это модели - простые старые PHP-объекты. У них нет внешних зависимостей. Doctrine может принимать любой старый PHP-объект, хранить его в базе данных и позже извлекать его снова. Модели не связаны с ORM вообще.
То, что вы читаете в документации Doctrine о геттерах, сеттерах, реляционной целостности и т.д., это просто хорошие методы разработки OO. Они не являются требованием к Доктрине, но они облегчают вашу жизнь. Вы также должны использовать их для своих моделей ORM DataMapper! Если вы хотите, вы можете использовать магические геттеры и сеттеры или даже просто старые публичные свойства на ваших моделях Doctrine. Просто потому, что Доктрина говорит, что вы не должны этого делать, это не значит, что вы не можете этого сделать. Доктрина с радостью использует ваши модели с общедоступными свойствами, но есть некоторые оговорки. Это все.