2

doctrineを使用して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

ダークへの称賛彼の答えは正しいです。エンティティ モデルを反復処理する場合は、それが適切な方法です。返される 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 に答える
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 に答える