我有一個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