我有一个Propel 1.6生成的类组,它与Inits有关,并且Inits有与它们相关的Resps。非常简单。获取相关对象时,Propel是否缓存条件?
我不明白这两个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()
的标准不为null,它将始终从数据库获取结果。也许一些其他Propel缓存?
(是的,你是对的变量名称,感谢j0k清理它。)我有点看到你在说什么。但我会期望Propel生成一个新的WHERE Init.Id =?每次在循环中调节。但我猜这是不是这样做? – matt 2013-03-15 21:26:54
我不认为这会......但我不是100%确定。还有其他的事情可以做,但即使如此,我认为这不是你的代码是罪魁祸首。 – jakerella 2013-03-15 21:47:03