【发布时间】:2013-03-15 18:54:17
【问题描述】:
我有一个 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 缓存?
【问题讨论】: