Запрос частной собственности суперкласса в Doctrine - PullRequest
2 голосов
/ 23 августа 2011

Читая документацию Doctrine , я нашел следующий пример:

/**
 * @Entity
 * @InheritanceType("SINGLE_TABLE")
 * @DiscriminatorColumn(name="discr", type="string")
 * @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
 */
class Person
{
    /**
     * @Id @Column(type="integer")
     * @GeneratedValue
     */
    protected $id;

    /**
     * @Column(type="string", length=50)
     */
    protected $name;
}

/**
 * @Entity
 */
class Employee extends Person
{
    /**
     * @Column(type="string", length=50)
     */
    private $department;
}

Согласно документу, класс Employee можно запросить следующим образом:

SELECT e FROM Entities\Employee e WHERE e.name = 'test';

Мой вопрос таков: что, если Person и Employee оба имеют свойство name с разными областями действия и значениями?Например:

class Person {
    private $name;
}

class Employee extends Person {
    private $name;
}

Я предполагаю, что этот запрос будет выполнен для Employee::$name:

SELECT e FROM Entities\Employee e WHERE e.name = 'test';

Тогда будет ли возможно запрос к Person::$name, покавозвращать только экземпляры Employee?Что-то вроде:

SELECT e FROM Entities\Employee e WHERE e.parent.name = 'test';

1 Ответ

0 голосов
/ 31 августа 2011

С Doctrine у ​​вас фактически может быть только одно уникальное имя свойства на иерархию, которое будет использоваться в Entity, поэтому переопределение свойств класса таким способом не является хорошей идеей.

Единственный способ получить разные значения в этом примере - определить разные имена свойств и поля базы данных:

class Person
{
    // ...

    /**
     * @ORM\Column(type="string", length=50)
     */
    protected $name;
}

class Employee extends Person
{
    // ...

    /**
     * @ORM\Column(type="string", length=50, name="employeeName")
     */
    protected $employeeName;
}
...