2016-06-29 16 views
2

Yii2 ArrayHelper-Helper-Methode toArray konvertiert verschachtelte Objekte nicht.Yii2 ArrayHelper :: ToArray funktioniert nicht rekursiv

Hier ist mein Testcode.

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

    $product = \yii\helpers\ArrayHelper::toArray($product); 

    print_r($product); 
} 

rekursive Eigenschaft ist standardmäßig aktiviert.

public static Array toArray ($ object, $ properties = [], $ rekursive = wahr)

Also dieses Stück Code sollte ordnungsgemäß funktionieren, aber es funktioniert nicht.

Aktion gibt eine Ebene Array ohne firstImage Objekt zurück.

Was mache ich hier falsch?

PS: Der Code wurde zu Testzwecken vereinfacht. Ich weiß, dass man in dieser bestimmten Situation einfach asArray() Methode verwenden kann, um AR-Datensatz in Array zu erhalten.

Antwort

2

sollten Sie diese stattdessen verwenden:

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

Lesen Sie mehr über Retrieving Data in Arrays.

Wenn Sie wirklich toArray() verwenden möchten, und da eine Beziehung nicht wirklich ein Attribut oder eine Eigenschaft ist, sollten Sie einfach den zweiten Parameter verwenden, z. :

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

Oder, wenn Sie REST verwenden, könnten Sie extraFields() in Ihrem Modell außer Kraft setzen:

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

mehr lesen über .

+0

Ich weiß es. Der Code wurde absichtlich zu Testzwecken vereinfacht. Es gibt einige komplexere Fälle, in denen ich ein AR-Objekt in ein Array konvertieren muss. Und ich brauche es rekursiv. – Alliswell

+0

Es scheint gut zu funktionieren. Vielen Dank! – Alliswell

+0

dadurch muss es alle Modelleigenschaften hinzufügen, es wird langwierig sein. Gibt es dafür eine präzise Methode? so dass alle Modelle und die damit verbundenen Modelle in Array kommen. – FSShaikh