我有一个 Propel 1.6 生成的类 Group,它具有与之相关的 Inits,而 Inits 具有与它们相关的 Resps。很简单。
我不明白这两段 Propel 代码之间的区别。$notDeleted
在第一个中,我在每个循环上重新创建标准。这段代码做了我想要的——它将所有的 Resps 放入$data
数组中。
foreach ($group->getInits() as $init) {
$notDeleted = RespQuery::create()->filterByIsDeleted(false);
foreach ($init->getResps($notDeleted) as $resp) {
$data[] = $resp;
}
}
在第二个代码中$notDeleted
,出于(我认为的)明显的效率原因,我将标准拉出循环。这段代码不能按我想要的方式工作——它只能从其中一个 Inits 中获取 Resps。
$notDeleted = RespQuery::create()->filterByIsDeleted(false);
foreach ($group->getInits() as $init) {
foreach ($init->getResps($notDeleted) as $resp) {
$data[] = $resp;
}
}
我认为这一定与getResps()
方法如何缓存结果有关,但这不是文档或代码在该方法中读取的方式。文档和代码说,如果传入的条件getResps()
不为空,它将始终从数据库中获取结果。也许其他一些 Propel 缓存?