2015-06-29 5 views
11

Есть ли способ конвертировать ActiveRecord в массив в Yii2? Я знаю, что мы можем сделать это для ActiveQuery, например User :: find() -> asArray() -> one(); Но можем ли мы преобразовать модель в массив, когда она уже выбрана? Я хочу сделать это в функции beforeSave и сохранить этот массив в кеше. Спасибо.Yii2 - ActiveRecord to Array

ответ

28

из Yii2 Guide использования 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

Тогда оцените этот ответ и отметьте как обработано – scaisEdge

+0

Wow! Я узнал новый способ использования 'toArray', спасибо! – realtebo

+2

Я хотел бы добавить, что ActiveRecord также имеет функцию 'toArray()', поэтому '$ model-> toArray()' также будет работать для преобразования одной модели после ее извлечения. –

21

Попробуйте это!

$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

это более yii2 путь – sasori

+0

Это намного лучше ... –

+0

Этот ответ гораздо более оптимальный – dzona