问题是关于原则1.2和Symfony 1.4
简而言之:我正在运行简单的SQL查询和抓取结果与PDO数组。在此之后,我创建了从同一表中获取数据的Doctrine_Collection,并调用synchronizeFromArray将数据加载到集合中。
一切都很好-集合被创建,所有数据在我的主键旁边,碰巧是布尔值false而不是真实值。
下面是代码示例:
// Fetch single object from DB
$sql = "SELECT * FROM payments LIMIT 1";
$p = $connection->query($sql)->fetchAll(PDO::FETCH_ASSOC);
var_dump($p); // I see that all the data including `id` is ok
$c = new Doctrine_Collection('Payment', 'id');
$c->synchronizeFromArray($p);
var_dump($c->toArray()); // All the data is ok but `id` == false
我试图使用Doctrine_Collection::fromArray而不是synchronizeFromArray,但它给出相同的结果
-
在
Doctrine_Collection::fromArray
(synchronizeFromArray
too)期间,记录主键(DoctrineRecord::_id
数组)不会更新 -
DoctrineRecord::toArray()
将用DoctrineRecord::getIncremented()
的结果覆盖所有主键列值,因为第1点。是空的。
fromArray()
之前修改$p
数组。在你的数组中,你应该将你的主键名称改为_identifier
。
在您的情况下,最简单的解决方案是修改您的SQL查询:
$sql = "SELECT `id` as `_identifier`, * FROM payments LIMIT 1";
下面的代码来自Doctrine_Record::fromArray():
if ($key == '_identifier') {
$refresh = true;
$this->assignIdentifier($value);
continue;
}
将为您的记录分配适当的_id
数组