对于某个设置,我有以下配置:
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_date
和id
是的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