2

我希望使用学说导出到 csv 文件。但是,数据可能非常大。因此我不想将结果输出到一个完整的数组。我想迭代地遍历结果。

我试过看这里的 学说文档

PHP 看起来像这样

    $result = mysql_query("SELECT * FROM bigtable");
    while($row = mysql_fetch_assoc($result)) {
        // do code iteratively here
    }

不知道你如何在 symfony2 的教义中做同样的事情

4

3 回答 3

8

这是来自关于批处理的原则文档

$q = $this->_em->createQuery('select u from MyProject\Model\User u');
$iterableResult = $q->iterate();
foreach ($iterableResult AS $row) {
    // do stuff with the data in the row, $row[0] is always the object

    // detach from Doctrine, so that it can be Garbage-Collected immediately
    $this->_em->detach($row[0]);
}

'select u ....相当于你的SELECT * ...

于 2013-02-22T14:30:57.273 回答
0
$result = mysql_query("SELECT * FROM bigtable");
while($row = mysql_fetch_assoc($result)) {
    // do code iteratively here
}

Flat PHP和 symfony2/doctrine 旨在避免它。http://symfony.com/doc/2.0/book/from_flat_php_to_symfony2.html

于 2013-02-22T14:31:04.133 回答
0

对 Dirk 表示敬意,他的回答是正确的。如果您想迭代整个实体模型,那么这就是要走的路。有时您可能没有返回的 sql 结果的模型映射设置。如果您想通过原始 sql 文件执行此操作,那么我就是这样做的。我很想听听更多的想法。

您通过控制器将教义连接传递给类

控制器

function indexAction(){
    $className = new ClassName($this->getDoctrine()->getEntityManager());
}

然后,您可以创建原始 sql 查找

实体

function __construct($entity){
    $this->connection = $entity->getConnection();
}


function saveToCSV
{
    $stmt = $this->connection->prepare("SELECT * FROM bitTableExample ");
    $stmt->execute();

    while($row = $stmt->fetch()){
        // append to csv file
    }
}
于 2013-02-25T10:01:26.600 回答