如何制作类似于经典PHP PDO的内容
while ($obj = $stmt->fetch()) {...}
在Doctrine 1.2中。
我试过
while ($obj = $query->fetchOne()) {...}
但它始终只返回找到的第一个对象。
我有什么办法可以实现这种行为吗?
我的查询并不重要。这是一个简单的(注意我在模型的* Table类中)
$query = $this->createQuery('a');
答案 0 :(得分:1)
在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();
....
}
中找到了这个
答案 1 :(得分:0)
你试过了吗?
while ($obj = $query->execute()) {...}
如果你想获取数组而不是对象:
while ($obj = $query->execute(array(), Doctrine_Core::HYDRATE_ARRAY)) {...}
答案 2 :(得分:0)
如果你有连接,那就这样做:
$stmt = $conn->query($queryString);
while ($obj = $stmt->fetch()) {...}
使用fetchOne()
,您只能获得一个条目。
答案 3 :(得分:0)
使用水合物模式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
}