0

Userが Doctrine_Record を拡張するモデルであると仮定して、5000 個のユーザー レコードを作成する以下の (任意の) コードを考えてみましょう。

$conn->beginTransaction();

for ($i = 1, $i < 5001, $i++) {

    $user = new User();
    $user->some_field = $i;
    $user->save();
    $user->free(true);
}

$conn->commit();

このスクリプトが 30 秒後にタイムアウトし、すべてのユーザーを作成できていないことがわかりました。このコードを最適化してより迅速に動作させる方法はありますか? レコードを作成するために通常の古い SQL を書くことを検討していますが、挿入フックなどを含む Doctrine_Record の機能を失います (ユーザー モデルにフックがなくても、このスクリプトはタイムアウトすることに注意してください)。

何かアドバイス?

4

1 に答える 1

4

Doctrine_Collection一括挿入を許可するクラスを試す必要があります。

$collection = new Doctrine_Collection('tablename');
$collection->add($record1);
$collection->add($record2);
$collection->add($record3);
$collection->add($record4);
$collection->save();
于 2012-05-07T15:06:54.937 に答える