hydrate()
Doctrine モデルの方法に少し問題があります。このメソッドを使用して、次のように特定の配列から具体的なモデルのオブジェクトを水和します。
$model = new Doctrine\Model\Model;
$model->hydrate($model_array);
ネストされたサブモデルなしで単純なオブジェクトをハイドレートする場合、すべてが完璧に機能します。ここでの問題は、ネストされたオブジェクトを持つオブジェクトを (このメソッドを使用して) ハイドレートする必要があることです (それらのいくつかにはネストされたオブジェクトもあります)。
私がそれを使用していた場合HYDRATE_RECORD
は問題ありませんが、クエリからのすべてのレコードがオブジェクトとして返されるため、メモリ消費量が増加します。したがって、私は使用してHYDRATE_ARRAY
おり、オンデマンドでその具体的な配列をオブジェクトに水和しています。
モデル A にネストされたモデル AB、AC (1 対多)、AD があり、AC に別のネストされたモデル ACE があるとします。print_r
A 配列の後に、次の構造が表示されます。
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_RECORD
DB を照会するときには使用できません。