2

问题是关于教义 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 但它给出了相同的结果

4

1 回答 1

1
  1. Doctrine_Collection::fromArraysynchronizeFromArray也)记录期间,主键(DoctrineRecord::_id数组)不会被更新。

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

于 2014-09-12T18:27:06.747 回答