2015-06-29 15 views
11

Gibt es eine Möglichkeit, ActiveRecord in ein Array in Yii2 zu konvertieren? Ich weiß, dass wir das für ActiveQuery tun können, zum Beispiel User :: find() -> asArray() -> one(); Aber können wir Model in Array konvertieren, wenn es bereits abgerufen wurde? Ich möchte das in der Funktion beforeSave tun und dieses Array zum Zwischenspeichern speichern. Vielen Dank.Yii2 - ActiveRecord zu Array

Antwort

28

von Yii2 Guide Verwendung arrayHelper

$posts = Post::find()->limit(10)->all(); 
    $data = ArrayHelper::toArray($posts, [ 
     'app\models\Post' => [ 
      'id', 
      'title', 
      // the key name in array result => property name 
      'createTime' => 'created_at', 
      // the key name in array result => anonymous function 
      'length' => function ($post) { 
       return strlen($post->content); 
      }, 
     ], 
    ]); 
+0

Dann bewerten Sie die Antwort und markieren Sie als akzeptiert – scaisEdge

+0

Wow! Ich habe eine neue Art gelernt, 'toArray' zu benutzen, danke! – realtebo

+2

Ich möchte hinzufügen, dass ActiveRecord auch eine Funktion 'toArray()' hat, so würde '$ model-> toArray()' auch für die Konvertierung eines einzelnen Modells nach dem Abrufen funktionieren. –

21

Try this!

$model = Post::find($id)->limit(10)->asArray()->all(); 
$model = Post::find($id)->select('id,name as full')->asArray()->one(); 
$model = Post::find($id)->select('id,name as full')->asArray()->all(); 
$model = Post::find()->where(['slug'=>$slug])->asArray()->one(); 
+0

das ist ein yii2 Weg – sasori

+0

Das ist viel besser ... –

+0

Diese Antwort ist weit optimaler – dzona