Doctrine orm 原则2在实体中编辑DQL
我有几个带有两个主键的数据库表,Doctrine orm 原则2在实体中编辑DQL,doctrine-orm,entity,dql,Doctrine Orm,Entity,Dql,我有几个带有两个主键的数据库表,id和date。我不更新记录,而是插入带有更新信息的新记录。此新记录具有相同的id,并且date字段现在为()。我将使用产品表来解释我的问题 我希望能够在特定日期请求产品详细信息。因此,我在DQL中使用了以下子查询,效果很好: WHERE p.date = ( SELECT MAX(pp.date) FROM Entity\Product pp WHERE pp.id = p.id AND pp.date < :date )
id
和date
。我不更新记录,而是插入带有更新信息的新记录。此新记录具有相同的id
,并且date
字段现在为()。我将使用产品表来解释我的问题
我希望能够在特定日期请求产品详细信息。因此,我在DQL中使用了以下子查询,效果很好:
WHERE p.date = (
SELECT MAX(pp.date)
FROM Entity\Product pp
WHERE pp.id = p.id
AND pp.date < :date
)
JOIN p.category c
WHERE p.date = (
SELECT MAX(pp.date)
FROM Entity\Product pp
WHERE pp.id = p.id
AND pp.date < :date
)
AND c.date = (
SELECT MAX(cc.date)
FROM Entity\ProductCategory cc
WHERE cc.id = c.id
AND cc.date < :date
)
但是,正如您所看到的,如果我有多个引用表,我将不得不复制同一个DQL。我希望以某种方式将这些子查询添加到实体中,以便每次调用实体时都会添加此子查询
我曾想过在\u构造($date)
或某种设置($date)
方法中添加这个,但我有点被困在这里了。另外,将@Id
添加到Entity\Product::date
是否有帮助
我希望有人能帮助我。我不希望有一个完整的解决方案,如果朝着一个好的方向迈出一步,我将不胜感激。我想我已经找到了我的解决方案。诀窍是(首先,更新至第2.2条)使用: 并在我的存储库中启用它:
$this->_em->getFilters()->enable("version")->setParameter('date', $date);
$configuration->addFilter("version", Filter\VersionFilter");
$this->_em->getFilters()->enable("version")->setParameter('date', $date);