На самом деле есть другой путь, но он вам не понравится. Вы можете использовать чистый MySQL :)
Когда я пытался получить 450 тыс. Объектов из базы данных, используя getRepository ("..") -> findAll () - это заняло несколько часов, пока я не закрыл скрипт :). Так что я использовал код как
$c = $doctrine->getConnection();
mysql_connect($c->getParams()['host'],$c->getParams()['user'],$c->getParams()['password']);//$link =
mysql_select_db($c->getParams()['dbname']);
$qid = mysql_query("SELECT id FROM TABLENAME");
while($i = mysql_fetch_row($qid)) {
$object = $doctrine->getRepository("...")->find($i[0]);
Я получил первый объект через 1,7 секунды , что для меня абсолютно приемлемо. Кроме грязного кода: (
После того, как я немного погуглил, я нашел вопрос и Руководство по доктрине . После переписывания я получил код
$iterableResult = $doctrine->getManager()->createQuery("SELECT c FROM ENTITY c")->iterate();
while (($row = $iterableResult->next()) !== false) {
$object = $row[0];
}
Код, приведенный выше, предоставил первый элемент за 2,4 секунды , что очень быстро, как для элементов doctrine2 и 450k в таблице.
Суть в том, что в doctrine2 уже есть почти все, что вам нужно для «реального» использования, но вы все равно можете упростить свою жизнь с помощью некрасивого кода старой школы:)
ОБНОВЛЕНИЕ: не забудьте каскадно отсоединить все загруженные объекты. А в symfony2 вам также нужно отключить ведение журнала SQL, запустив код
$doctrine->getConnection()->getConfiguration()->setSQLLogger(null);