Php 原则连接和类表继承

Php 原则连接和类表继承,php,doctrine-orm,dql,Php,Doctrine Orm,Dql,我在教义上遇到了这个问题,我周围没有人能帮我解决这个问题。所以我希望这里有人知道: 我正在使用以下结构: 实体:MLT 实体:LT 然后我有两个相同类型的实体:LTString和LTText: 实体:LTText 实体:LTString 现在我的问题是: 我正在创建以下联接: $qb = $em->createQueryBuilder(); $qb->select('naam') ->from('\TBIT\Entities\Naam', 'naam') //this

我在教义上遇到了这个问题,我周围没有人能帮我解决这个问题。所以我希望这里有人知道:

我正在使用以下结构:

实体:MLT

实体:LT

然后我有两个相同类型的实体:LTString和LTText:

实体:LTText

实体:LTString

现在我的问题是:

我正在创建以下联接:

$qb = $em->createQueryBuilder();
$qb->select('naam')
    ->from('\TBIT\Entities\Naam', 'naam') //this is the MLT
    ->leftjoin('naam.languageTerms','lts') //these are the LT's
    ->orwhere($qb->expr()->like('lts.value',"'%".$word."%'"));
现在,最后一行给我带来了麻烦。它给出的错误是lts没有值字段。这在某种程度上是正确的,因为子类拥有它。但是如何使查询自动包含子类?

您是否尝试将LT类中的$value字段作为受保护的访问:


因此,如果需要将$value设置为不同的数据类型,只需在子类中重写它。

我发现我可以使用子查询解决这个问题。大致如下:

$qb->select('naam')
    ->from('\TBIT\Entities\Naam', 'naam') //this is the MLT
    ->where(
        'naam.languageTerms in (SELECT lts FROM [class] lts'
            .' WHERE ' . $qb->expr()->like('lts.value',"'%".$word."%'")
        .')'
    );

是的,我试过了,但是它从数据库中删除了两个子类表。而仅仅定义受保护的$value而上面没有@column是行不通的。我对这个场景很感兴趣。我将尝试复制它
/**
 * @Entity
 */
class LTText extends LT {

    /**
     * @Column(type="text")
     */
    private $value;
}
/**
 * @Entity
 */
class LTText extends LT {

    /**
     * @Column(type="string")
     */
    private $value;
}
$qb = $em->createQueryBuilder();
$qb->select('naam')
    ->from('\TBIT\Entities\Naam', 'naam') //this is the MLT
    ->leftjoin('naam.languageTerms','lts') //these are the LT's
    ->orwhere($qb->expr()->like('lts.value',"'%".$word."%'"));
class LTText extends LT {

    /**
     * @Id @Column(type="integer")
     * @GeneratedValue
     */
     private $id;

    /**
     * @Column(type="string")
     */
     private $value;

}
$qb->select('naam')
    ->from('\TBIT\Entities\Naam', 'naam') //this is the MLT
    ->where(
        'naam.languageTerms in (SELECT lts FROM [class] lts'
            .' WHERE ' . $qb->expr()->like('lts.value',"'%".$word."%'")
        .')'
    );