0

对于某个设置,我有以下配置:

Foo\Entity\Article> LibI18n\Entity\Article> Lib\Entity\AbstractArticle。所以有两个类和一个抽象,它们都相互继承了属性。abstract、i18n 和 foo 类都有自己的字段和 (XML) 映射。现在,如果我查询 Foo 文章,当我得到他的错误时,会生成一些不正确的 SQL:

SQLSTATE [42S22]:找不到列:1054“字段列表”中的未知列“b0_.publish_date”

查询是这样的:

SELECT
    b0_.publish_date AS publish_date0,
    b0_.id AS id1, 
    b0_.blog_id AS blog_id2, 
    m1_.image_id AS image_id3
FROM foo_article m1_
WHERE
    m1_.publish_date IS NOT NULL
    AND m1_.publish_date <= ? 
    AND b0_.blog_id = ? 
ORDER BY m1_.publish_date DESC
LIMIT 3

// with params ["2013-09-10 12:02:08", 1]

如前所述,所有b0内容都应替换为m1. 显然,Doctrine 不理解我的映射。该image_id字段对应于Foo命名空间。publish_dateid是的blog_id所有属性AbstractArticle

问题是:如何解决这个问题?发布关于实体和相应映射的相当多的 php/XML 代码,所以一切都在一个要点中:https ://gist.github.com/juriansluiman/e063c8cfcd9e27288d27

更新 1

使用的模块:

  • DoctrineORMModule:0.7.0
  • 教义模块:0.7.2

教义库:

  • 学说/规则:2.4.0
  • 学说/dbal:2.4.0
  • 学说/共同点:2.4.1
  • 学说/收藏:1.1
  • 学说/缓存:1.1
  • 学说/注释:1.1.2
  • 学说/变形器:1.0
  • 学说/词法分析器:1.0

更新 2

这是存储库类:

class Article extends EntityRepository
{
    public function findRecent(BlogEntity $blog, $limit)
    {
        $qb = $this->createQueryBuilder('a');
        $qb->andWhere('a.blog = :blog')
           ->setParameter('blog', $blog)
           ->setMaxResults($limit);

        return $qb->getQuery()->getResult();
    }

    public function createQueryBuilder($alias, $constraints = true)
    {
        $qb = parent::createQueryBuilder($alias);

        if (true === $constraints) {
            $qb->andWhere('a.publishDate IS NOT NULL')
               ->andWhere('a.publishDate <= :now')
               ->setParameter('now', new DateTime)
               ->orderBy('a.publishDate', 'DESC');
        }

        return $qb;
    }
}

这会生成以下 DQL(就在$qb->getQuery()调用之前):

SELECT a
FROM Foo\Entity\Article a
WHERE
    a.publishDate IS NOT NULL
    AND a.publishDate <= :now
    AND a.blog = :blog
ORDER BY a.publishDate DESC
4

0 回答 0