我原以为Doctrine2会优化我的查询,以便为任何数据库事务提供最佳性能。
我要在数据库表中插入大约500条记录,然后我注意到它创建了500多个查询来插入这些记录(每条记录一个查询),我想知道为什么Doctrine不使用多个插入一次性插入所有记录,这样不是可以减少负载并优化查询吗?我对Doctrine的这种行为有所疑问,是否有什么我没有理解到的东西?
这是我用于插入的代码:
我要在数据库表中插入大约500条记录,然后我注意到它创建了500多个查询来插入这些记录(每条记录一个查询),我想知道为什么Doctrine不使用多个插入一次性插入所有记录,这样不是可以减少负载并优化查询吗?我对Doctrine的这种行为有所疑问,是否有什么我没有理解到的东西?
这是我用于插入的代码:
$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();
更新1:
以下是所请求的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
)
)
fromArray()
的内容以及在pastebin或gist上提供一个$value
实例? - ilhnctn