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);