как получить доступ к полям в унаследованной таблице в запросе doctrine2 / dql - PullRequest
3 голосов
/ 28 марта 2011

У меня есть модели: Unit и StringValue (унаследовано от AbstractValue). Модуль знает только о AbstractValue (OneToMany). Я создаю StringValue и добавляю его в Unit. Как я могу получить доступ к свойству StringValue.value в dql или queryBuilder?

Models:

/**
 * @Entity
* @Table(name="Unit")
*/
class Unit {
    ...
    /**
     * Values
    * @var Doctrine\Common\Collections\ArrayCollection
    *
    * @OneToMany(targetEntity="AbstractValue"
    *      , mappedBy="unit"
    *      , cascade={"persist"})
    */
    private $values;
}

/**
 * @Entity
 * @Table(name="AbstractValue")
 * @InheritanceType("JOINED")
 * @DiscriminatorColumn(name="discr", type="string")
 * @DiscriminatorMap({
 "field" = "AbstractValue"
 *      , "string" = "StringValue"
 *      , "integer" = "IntegerValue"
 *      , "float" = "FloatValue"
 * })
 */
abstract class AbstractValue {
    ...
}

/**
 * @Entity
 * @Table(name="StringValue")
 */ 
class StringValue extends AbstractValue {
    /**
     * String value.
     * @var string
     *
     * @Column(name="value", type="string", length="255")
     */
    private $value;
}

//make a unit with value:
$Unit = new Unit;
$Value = new StringValue;
$Unit->addValue($value);
//persist/flush
//make a query select
$queryBuilder = $em->createQueryBuilder();
$queryBuilder
    ->select('u')
    ->from('Unit', 'u')
    ->leftJoin('u.values', 'v');

$queryBuilder
    ->andWhere('v.value = :brand')
    ->setParameter('brand', 'qweqwee');

//error:
Exception [Doctrine\ORM\Query\QueryException] information:

Message: [Semantical Error] line 0, col 130 near 'value = :bra': Error: Class AbstractValue has no field or association named value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...