问题是关于学说1.2和Symfony 1.4
简而言之:我正在运行简单的SQL查询并使用PDO将结果提取到数组中。之后,我创建了我从同一个表中获取数据的Doctrine_Collection,并调用synchronizeFromArray将数据加载到集合中。
一切都很好 - 创建了集合,并且我的主键旁边的所有数据恰好是布尔值而不是实际值。
以下是代码示例:
// 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但是它给出了相同的结果
答案 0 :(得分:1)
在Doctrine_Collection::fromArray
(synchronizeFromArray
)期间,记录主键(DoctrineRecord::_id
数组)无法更新。
DoctrineRecord::toArray()
将覆盖DoctrineRecord::getIncremented()
结果的所有主键列值,因为第1点是空的。
解决此问题的一种方法是在执行$p
之前修改fromArray()
数组。
在您的阵列中,您应将主键名称更改为_identifier
。
在您的情况下,最简单的解决方案是修改您的SQL查询:
$sql = "SELECT `id` as `_identifier`, * FROM payments LIMIT 1";
这样跟随来自Doctrine_Record :: fromArray()的代码:
if ($key == '_identifier') {
$refresh = true;
$this->assignIdentifier($value);
continue;
}
会为您的记录分配正确的_id
数组。