开发者

how to access fields in inherited table in doctrine2 / dql query

开发者 https://www.devze.com 2023-02-20 01:49 出处:网络
I have a models: Unit and StringValue (inherited from AbstractValue). Unit only knows about AbstractValue (OneToMany). I create a StringValue and add it to Unit. How can I access StringValue.value pro

I have a models: Unit and StringValue (inherited from AbstractValue). Unit only knows about AbstractValue (OneToMany). I create a StringValue and add it to Unit. How can I access StringValue.value property in dql or 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")
 * @DiscriminatorM开发者_开发百科ap({
 "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
0

精彩评论

暂无评论...
验证码 换一张
取 消