如何制作类似于经典 PHP PDO 的东西
while ($obj = $stmt->fetch()) {...}
在教义 1.2 中。
我试过了
while ($obj = $query->fetchOne()) {...}
但它总是只返回找到的第一个对象。
有什么办法可以实现这种行为吗?
我的查询并不重要。这是一个简单的(注意我在模型的 *Table 类中)
$query = $this->createQuery('a');
如何制作类似于经典 PHP PDO 的东西
while ($obj = $stmt->fetch()) {...}
在教义 1.2 中。
我试过了
while ($obj = $query->fetchOne()) {...}
但它总是只返回找到的第一个对象。
有什么办法可以实现这种行为吗?
我的查询并不重要。这是一个简单的(注意我在模型的 *Table 类中)
$query = $this->createQuery('a');
在 symfony2 中处理迁移命令时,我发现它$query->executes();
会在返回之前将完整的结果集提取到 RAM 中。
对于少量数据,这不是问题,但对于较大的结果,您的进程可能会运行 OutOfMemory。
要解决该问题,您可以使用以下语句“逐个”迭代结果:
$query->iterate();
我认为它类似于此 PDO 声明:while ($obj = $stmt->fetch()) {...}
更完整的示例可能如下所示:
$em = $this->getContainer()->get('doctrine');
$iterator = $em->getRepository('AcmeBundle:Entity')
->createQueryBuilder('e')
->getQuery()->iterate();
foreach($iterator as $item){
$item = $item[0];
// Your logic here:
$item->getId();
....
}
在教义文档中找到了这一点。
你有没有尝试过:
while ($obj = $query->execute()) {...}
如果你想获取一个数组而不是对象:
while ($obj = $query->execute(array(), Doctrine_Core::HYDRATE_ARRAY)) {...}
如果您有连接,请这样做:
$stmt = $conn->query($queryString);
while ($obj = $stmt->fetch()) {...}
与fetchOne()
您一起,您只会得到一个条目。
使用水合物模式Doctrine_Core::HYDRATE_ON_DEMAND
$q = Doctrine_Query::create()
->select('...')
->from('...');
// Returns instance of Doctrine_Collection_OnDemand
$result = $q->execute(array(), Doctrine_Core::HYDRATE_ON_DEMAND);
foreach ($result as $obj)
{
// do something with your object
}