2016-06-29 10 views
2

Yii2 ArrayHelperのヘルパーメソッドtoArrayはネストされたオブジェクトを変換しません。Yii2 ArrayHelper :: toArrayが再帰的に動作しません

ここは私のテストコードです。

再帰プロパティは、デフォルトで有効になっています。

public staticな配列のtoArray($オブジェクト、$プロパティ= []、$再帰= 真)

ように、コードのこの作品は、正常に動作するはずですが、それはしません。

アクションは、firstImageオブジェクトなしで1レベルの配列を返します。

私はここで間違っていますか?

PS: テスト目的でコードが簡略化されました。私はこの特定の状況では、単純にasArray()メソッドを使用してARレコードを配列で取得できることを知っています。

答えて

2

あなたは代わりにこれを使用する必要があります。

$product = \common\models\Product::find() 
    ->where(['id' => 5779]) 
    ->with('firstImage') 
    ->asArray() 
    ->one(); 

Retrieving Data in Arraysについては、こちらをご覧ください。

本当にtoArray()を使用したい場合、リレーションが実際に属性やプロパティではないため、2番目のパラメータ(例: :

$product = \yii\helpers\ArrayHelper::toArray($product, [ 
    'common\models\Product' => [ 
     // add needed properties here 
     // ... 
     'firstImage', 
    ], 
]); 

それとも、あなたはRESTを使用している場合、あなたはあなたのモデルにextraFields()をオーバーライドすることができます:

public function extraFields() 
{ 
    return ['firstImage']; 
} 

はについては、こちらをご覧ください。

+0

私はそれを知っています。コードはテスト目的で意図的に単純化されました。 ARオブジェクトを配列に変換する必要がある複雑なケースがいくつかあります。そして私はそれを再帰的に動作させる必要があります。 – Alliswell

+0

正常に動作するようです。ありがとう! – Alliswell

+0

これにより、すべてのモデルプロパティを追加する必要があります。時間がかかるでしょう。これを行う正確な方法はありますか?すべてのモデルとその関連モデルが配列されます。 – FSShaikh

関連する問題