加载数组到Doctrine_Collection


Load array to Doctrine_Collection

问题是关于原则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,但它给出相同的结果

  1. Doctrine_Collection::fromArray (synchronizeFromArray too)期间,记录主键(DoctrineRecord::_id数组)不会更新

  2. 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数组