查询将主要实体与其连接的实体一起装入并水合,并对其进行过滤。
具有不同过滤条件的相同查询不会更新联接的实体。
一些数据:
Promise.all
执行2个查询,以获取一些已加入其容器的层,首先是类别A,然后是类别B:
Tiers:
| id | name |
| 1 | alpha |
| 2 | beta |
Container:
| id | tiers_id | category |
| 10 | 1 | A |
| 20 | 1 | A |
| 30 | 1 | B |
| 40 | 1 | B |
第二次查询后,第1层保留其在第一次查询期间加载的容器。那不是预期的。
那么有没有办法在第二次查询后获取容器30和40?
也许是在第一次查询后“重置/分离”层实体的容器?
还是其他...
查询中的多重选择用于将已连接所需容器的层水化。
“ getContainers”方法给出了每个层的预期容器。
无论搜索多少层,BDD的成本只有1个SQL查询。
我想不能分离/重新加载层,因为它们是在查询之前,之间和之后更新的,因此在刷新时会抛出这种异常:
$dql = "select t, c
from Tiers t
join t.containers c
where t.id in (?1) and c.category = (?2)";
$result = $em->createQuery($dql)
->setParameter(1, array(1))
->setParameter(2, 'A')
->getResult();
$tiers = $result[0];
$containers = $tiers->getContainers(); // tiers 1 with containers 10 and 20, that's fine !
$result = $em->createQuery($dql)
->setParameter(1, array(1))
->setParameter(2, 'B')
->getResult();
$tiers = $result[0];
$containers = $tiers->getContainers(); // BAD HERE: still get containers 10 and 20, looking for containers 30 and 40.
答案 0 :(得分:0)
在第二次查询之前重置层的容器:
foreach($result as $tiers)
$tiers->nullContainers();
将方法添加到Entity \ Tiers:
public function nullContainers()
{
this->containers = null;
}
然后第二个查询“刷新”层的容器。