#php #database #doctrine-orm
#php #База данных #doctrine-orm
Вопрос:
Я решил, что было бы неплохо ознакомиться с ORM, и выбрал Doctrine 2 в качестве ORM выбора.
Я работаю над тестовым проектом, чтобы изучить основы Doctrine. Хотя большинство людей обычно ведут блог, я решил создать базовое приложение, в котором можно сохранять и отслеживать заказы. Моя схема базы данных будет следующей:
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 (doctrine query language) для такого рода базовых вещей или есть способ легко получить связанные объекты? Я имею в виду, в противном случае в этом не было бы никакого смысла, верно? Кроме того, правильно ли я выполняю эти ассоциации? Я действительно запутался в этой самой базовой модели… Подробная помощь действительно ценится. Спасибо.
Ответ №1:
Во-первых, не стоит слишком беспокоиться о дизайне базы данных. Вы должны разработать свои объекты и использовать SchemaTool.
Теперь вопрос в том, существует ли простой способ доступа ко всем заказам из пользовательской модели?
Вы имеете в виду доступ ко всем заказам из пользовательской модели или доступ ко всем заказам, связанным с пользователем?
Если вы имели в виду первое, то вы что-то делаете неправильно (см. Ниже). Если вы имели в виду более поздний вариант, вам следует настроить двунаправленную связь между заказами и пользователями. (Кстати, это было бы OneToMany, а не OneToOne, поскольку у одного пользователя, вероятно, было бы много заказов).
Я действительно запутался в этой самой базовой модели…
Я думаю, что у вас, как и у многих программистов PHP, возникли проблемы с фундаментальным пониманием шаблона DataMapper и, в конечном счете, с дизайном, управляемым доменом. Помните, вы имеете дело с постоянными объектами, а не таблицами базы данных.
Я не могу предоставить здесь подробную информацию, потому что я буду писать книгу, поэтому я бы порекомендовал вам приобрести книгу по проектированию, основанному на домене, чтобы помочь начать с принципов. Доступно несколько хороших онлайн-ресурсов, таких как серия сообщений в блоге Федерико Каргнелутти, однако они не относятся конкретно к Doctrine 2.
Комментарии:
1. Это двунаправленное отношение «один ко многим» было тем, что я искал. Теперь это имеет смысл… Спасибо!