Я решил, что было бы хорошо познакомиться с ORM и пойти на Doctrine 2 в качестве ORM выбора.
Я работаю над тестовым проектом, чтобы изучить основы Доктрины. Хотя большинство людей обычно идут в блоге, я решил создать базовое приложение, в котором вы можете сохранять и отслеживать заказы. Моя схема базы данных будет следующей:
User id name Product id name price Sales_order id user_id product_id quantity unit_price
Следовательно, моя модель заказа выглядит так:
/** * @Entity * @Table(name="sales_order") */ class Order { /** * @Id * @Column(type="integer", nullable=false) * @GeneratedValue(strategy="AUTO") */ private $Id; /** * @OneToOne(targetEntity="User", inversedBy="user") */ private $user; /** * @OneToOne(targetEntity="Product", inversedBy="product") */ private $product; /** * @Column(type="integer", nullable=false) */ private $quantity; }
Теперь вопрос в том, есть ли простой способ доступа ко всем заказам из пользовательской модели? Должен ли я писать DQL (язык запросов доктрины) для такого рода базовых материалов или есть способ легко получить связанные объекты? Я имею в виду, что в этом не было бы никакого смысла, верно? Кроме того, правильно ли я делаю эти ассоциации? Я действительно запутался в этой самой базовой модели … Подробную помощь действительно оценили. Спасибо.
Во-первых, не беспокойтесь о дизайне базы данных. Вы должны проектировать свои объекты и использовать SchemaTool .
Теперь вопрос в том, есть ли простой способ доступа ко всем заказам из пользовательской модели?
Вы имеете в виду доступ ко всем заказам модели пользователя или доступ ко всем заказам, связанным с пользователем?
Если вы имели в виду первое, хорошо, что вы делаете неправильно (см. Ниже). Если вы имели в виду позднее, вы должны установить двунаправленную связь между заказами и пользователями. (BTW, это будет OneToMany, а не OneToOne, поскольку у одного пользователя, вероятно, будет много заказов).
Я действительно запутался в этой самой базовой модели …
Я думаю, что у вас есть проблемы с – наряду со многими программистами PHP – это фундаментальное понимание шаблона DataMapper и, в конечном итоге, Domain Driven Design. Помните, что вы имеете дело с устойчивыми объектами, а не с таблицами базы данных.
Я не могу предоставить подробную информацию здесь, потому что я бы написал книгу, поэтому я бы порекомендовал вам получить книгу о Domain Driven Design, чтобы помочь начать с принципов. Существует несколько хороших онлайн-ресурсов, таких как серия сообщений в блогах Федерико Карглунетти , однако они не являются специфическими для Доктрины 2.