Получение связанных записей в Doctrine 2 - PullRequest
2 голосов
/ 08 февраля 2011

Я решил, что было бы полезно познакомиться с 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 (язык запросов доктрины) для такого рода базовых вещей или есть способ легко получить связанные сущности? Я имею в виду, не было бы никакого смысла в этом иначе, верно? Кроме того, правильно ли я делаю эти ассоциации? Я очень запутался в этой очень простой модели ... Подробная помощь очень ценится. Спасибо.

1 Ответ

2 голосов
/ 08 февраля 2011

Во-первых, не беспокойтесь о дизайне базы данных.Вы должны проектировать свои объекты и использовать SchemaTool .

Теперь вопрос заключается в том, существует ли простой способ доступа ко всем заказам от пользователямодель?

Вы имеете в виду доступ ко всем заказам от пользовательской модели или доступ ко всем заказам, связанным с a пользователем?

Если вы имели в виду первое, хорошо, что вы делаете неправильно (см. Ниже).Если вы имели в виду позднее, вам следует установить двунаправленное отношение между заказами и пользователями.(Кстати, это будет OneToMany, а не OneToOne, поскольку у одного пользователя, скорее всего, будет много заказов).


Я действительно запутался в этой самой базовой модели ...

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

Я не могу предоставить здесь подробную информацию, потому что я бы написал книгу, поэтому я бы порекомендовал вам получить книгу о доменно-управляемом дизайне, чтобы помочьначать с принципов.Есть несколько хороших онлайн-ресурсов, таких как серия постов в блоге Federico Cargnelutti , однако они не относятся к Doctrine 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...