Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取相关对象时是否存在缓存条件?_Php_Propel - Fatal编程技术网

Php 获取相关对象时是否存在缓存条件?

Php 获取相关对象时是否存在缓存条件?,php,propel,Php,Propel,我有一个Propel 1.6生成的类组,它有与之相关的init,init有与之相关的resp。很简单 我不明白这两段代码之间的区别。在第一个循环中,我在每个循环上重新创建$notDeleted标准。这段代码实现了我想要的功能——它将所有resp放入$data数组中 foreach ($group->getInits() as $init) { $notDeleted = RespQuery::create()->filterByIsDeleted(false); fo

我有一个Propel 1.6生成的类组,它有与之相关的init,init有与之相关的resp。很简单

我不明白这两段代码之间的区别。在第一个循环中,我在每个循环上重新创建
$notDeleted
标准。这段代码实现了我想要的功能——它将所有resp放入
$data
数组中

foreach ($group->getInits() as $init) {
    $notDeleted = RespQuery::create()->filterByIsDeleted(false);
    foreach ($init->getResps($notDeleted) as $resp) {
        $data[] = $resp;
    }
}
在第二段代码中,出于(我认为是)明显的效率原因,我将
$notDeleted
标准从循环中拉出。这段代码没有按照我想要的方式工作——它只从一个init获取resp

$notDeleted = RespQuery::create()->filterByIsDeleted(false);
foreach ($group->getInits() as $init) {
    foreach ($init->getResps($notDeleted) as $resp) {
        $data[] = $resp;
    }
}
我认为这一定与
getResps()
方法如何缓存结果有关,但该方法中的文档或代码不是这样读取的。文档和代码表明,如果传入
getResps()
的条件不为空,它将始终从数据库中获取结果。可能是其他的推进缓存?

(首先,我猜您是想在循环中使用
$init
而不是
$initiative
。或者我们在这里没有看到其他代码。)

下面是我的猜测:在第二个示例中,您拉出了
$notDeleted
标准
对象,但每次通过内部
foreach
调用
getResps($notDeleted)
都会使spreep执行
filterByInit()
条件
实例上使用当前
Init
实例。这将向SQL中添加一个新的
WHERE
条件,但显然
Resp
只能有一个
Init.Id
值,因此只有一个结果


不过,我认为没有什么好的理由把它拔出来,在幕后,Propel只是创建了一个新的Criteria对象,克隆了您传入的对象,因此没有保存任何实际内存。

(是的,关于变量名,您是对的,感谢j0k对它进行了清理。)我有点明白您的意思了。但我本来希望生成一个新的WHERE Init.Id=?循环中的每次条件。但我猜它没有这么做?我不认为它会。。。但我不是100%肯定。可能还有其他事情发生,但即使是这样,我也不认为你的代码是罪魁祸首。