2

質問はdoctrine 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

synchronizeFromArray の代わりに Doctrine_Collection::fromArray を使用しようとしましたが、同じ結果が得られます

4

1 に答える 1

1
  1. Doctrine_Collection::fromArray(synchronizeFromArrayあまりにも) レコードの主キー (配列)の間DoctrineRecord::_idは更新されません。

  2. DoctrineRecord::toArray()すべての主キー列の値がDoctrineRecord::getIncremented()、ポイント 1. により空の結果で上書きされます。

これに対処する 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 に答える