Я предположил, что doctrine2 оптимизирует мой запрос, чтобы обеспечить лучшую производительность для любых транзакций базы данных.Doctrine2 - множественная вставка в одном запросе
Я вставлял около 500 записей в таблицу базы данных, и я заметил, что он создал 500 + запрос для вставки записей (один запрос на запись), мне интересно, почему бы доктрине не использовать несколько вставок чтобы вставить всю запись за один снимок, не уменьшит ли это нагрузку и не оптимизирует запрос? я что-то упустил из-за этого поведения из доктрины?
Вот код, я использую для вставки:
$content = json_decode($response->getBody());
$em = $this->getServiceLocator()->get('doctrine.entitymanager.orm_default');
foreach ($content as $value) {
$log = new log();
$log->fromArray($value);
$em->persist($log);
}
$em->flush();
Update1:
Вот содержание fromArray() в соответствии с просьбой, цель этой функции заключается в основном консолидации значений в классе свойство из массива:
/**
* Map parameters with class property.
*
* @param $array array
* @access public
* @return $this
*/
public function fromArray(array $array)
{
foreach ($array as $property => $value) {
$method = 'set'.ucwords($property);
$this->$method($value);
}
return $this;
}
Вот содержание $content
:
Array
(
[0] => stdClass Object
(
[id] => 111
[guid] => aaaa-bbbb-cccc
[wid] => 100
[pid] => 101
[start] => 2014-11-22T12:44:44+00:00
[stop] => 2014-11-22T15:23:11+00:00
[duration] => 9507
[description] => Log description
[tags] => Array
(
[0] => test
)
[at] => 2014-11-24T07:28:09+00:00
[uid] => 51
)
[1] => stdClass Object
(
[id] => 112
[guid] => dddd-eee
[wid] => 100
[pid] => 101
[billable] =>
[start] => 2014-11-22T15:35:07+00:00
[stop] => 2014-11-22T15:45:21+00:00
[duration] => 614
[description] => Lorem description
[tags] => Array
(
[0] => php
[1] => pm
)
[at] => 2014-11-24T04:35:30+00:00
[uid] => 51
)
)
Doctrine не обрабатывает ваш запрос магическим способом, он делает все, что вы просите. Вы упорствуете в foreach (это правда, как я вижу), и, вероятно, есть больше записей, чем 500. Вы должны решить это, прежде чем отправлять данные для сохранения метода, я имею в виду, что вы должны использовать лучший способ денормализации – ilhnctn
@ İlhanÇetinm благодарит вас за ответ , так как я понимаю, что здесь нет магии, разве это не основная задача оптимизации запросов? поскольку это метод ввода по умолчанию, это заставляет меня задаться вопросом, разрешает ли Doctrine даже массовое вложение? –
@ İlhanÇetin Я не уверен, правильно ли я слежу за вами, оцените, если вы можете показать пример. –