1

従来のPHPPDOに似たものを作成するにはどうすればよいですか

while ($obj = $stmt->fetch()) {...}

Doctrine1.2で。

私はもう試した

while ($obj = $query->fetchOne()) {...} 

ただし、常に最初に見つかったオブジェクトのみを返します。

この動作を実装する方法はありますか?

私の質問は本当に重要ではありません。これは単純なものです(私はモデルの* Tableクラスにいることに注意してください)

$query = $this->createQuery('a');
4

4 に答える 4

1

symfony2で移行コマンドを操作しているときに$query->executes();、結果セット全体をRAMにフェッチしてから返すことを発見しました。

これは少量のデータでは問題になりませんが、結果が大きくなると、プロセスでOutOfMemoryが実行される可能性があります。

この問題を解決するには、次のステートメントを使用して、結果を「1つずつ」繰り返すことができます。

$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();
   ....       
}

これは教義の文書で見つかりました

于 2012-12-07T22:59:38.757 に答える
0

やってみました:

while ($obj = $query->execute()) {...}

また、オブジェクトの代わりに配列をフェッチする場合は、次のようにします。

while ($obj = $query->execute(array(), Doctrine_Core::HYDRATE_ARRAY)) {...}
于 2012-07-17T13:47:33.850 に答える
0

接続を取得した場合は、次のようにします。

$stmt = $conn->query($queryString);
while ($obj = $stmt->fetch()) {...} 

を使用fetchOne()すると、エントリは1つだけになります。

于 2015-04-20T10:26:53.410 に答える
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
}

詳細情報:データハイドレーター—Doctrine1.2.4ドキュメント

于 2015-10-16T16:19:47.667 に答える