8

hydrate()Doctrine モデルの方法に少し問題があります。このメソッドを使用して、次のように特定の配列から具体的なモデルのオブジェクトを水和します。

$model = new Doctrine\Model\Model;
$model->hydrate($model_array);

ネストされたサブモデルなしで単純なオブジェクトをハイドレートする場合、すべてが完璧に機能します。ここでの問題は、ネストされたオブジェクトを持つオブジェクトを (このメソッドを使用して) ハイドレートする必要があることです (それらのいくつかにはネストされたオブジェクトもあります)。

私がそれを使用していた場合HYDRATE_RECORDは問題ありませんが、クエリからのすべてのレコードがオブジェクトとして返されるため、メモリ消費量が増加します。したがって、私は使用してHYDRATE_ARRAYおり、オンデマンドでその具体的な配列をオブジェクトに水和しています。

モデル A にネストされたモデル AB、AC (1 対多)、AD があり、AC に別のネストされたモデル ACE があるとします。print_rA 配列の後に、次の構造が表示されます。

A Array (
    ...
    ab Array ( ... )
    ac Array (
        AC Array (
            ...
            ace Array ( ... )
        )
        AC Array (
            ...
            ace Array ( ... )
        )
        ...
    )
    ad Array ( ... )
)

通常、ハイドレートを使用した後、これが私のオブジェクトになると思います。

A Object {
    ...
    ab Object { ... }
    ac Array (
        AC Object {
            ...
            ace Object { ... }
        }
        AC Object {
            ...
            ace Object { ... }
        }
        ...
    )
    ad Object { ... }
}

しかし、これの代わりに、次の構造を取得します。

A Object {
    ...
    ab Array ( ... )
    ac Array (
        AC Array (
            ...
            ace Array ( ... )
        )
        AC Array (
            ...
            ace Array ( ... )
        )
        ...
    )
    ad Array ( ... )
}

そのため、メイン モデルのみがオブジェクトに変換されました。ネストされたすべてのモデル配列を、想定される結果のようなオブジェクトに変換する方法を知っていますか?

いいえ、HYDRATE_RECORDDB を照会するときには使用できません。

4

2 に答える 2

2

これにつまずいた場合は、ドキュメントを調べてください。

fromArrayの代わりに試してみましたhydrateか?

于 2012-11-24T23:54:00.510 に答える
0

私の教義の知識の限りでこれに答えようとしていますが、私は水分補給を直接扱ったことがないので、それほど多くはありません。

水和方法として配列を使用する場合の問題は、基本的に、元のクエリに添付されたすべてのメタデータ、最も重要なのはテーブル名が失われることです。

これに対する解決策は、配列をオブジェクトに変換する独自のハイドレーションメソッドを作成することです。

于 2012-09-28T05:38:09.230 に答える