28

Is there any way to convert ActiveRecord to an array in Yii2? I do know we can do that for ActiveQuery, for example User::find()->asArray()->one();, but can we convert Model to array when it is already fetched? I want to do that in beforeSave() method and store that array in cache.

rob006
  • 18,710
  • 5
  • 41
  • 58
Volodymyr
  • 1,377
  • 2
  • 12
  • 19

3 Answers3

52

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();
Muhammad Shahzad
  • 7,778
  • 20
  • 71
  • 123
48

From Yii2 guide - use ArrayHelper::toArray():

$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);
        },
    ],
]);
rob006
  • 18,710
  • 5
  • 41
  • 58
scaisEdge
  • 124,973
  • 10
  • 73
  • 87
  • 9
    I would like to add that ActiveRecord also has a function `toArray()`, so `$model->toArray()` would also work for converting a single model after it is fetched. – Jelmer Keij Apr 11 '16 at 09:26
  • @JelmerKeij please post a proper related question well described so all the SO community can help you .. and eventually comment me with the link of this question .. – scaisEdge Apr 11 '16 at 09:33
  • 3
    Hi @scaisEdge it's not a question, it's extra information to point out that there's also the function `toArray()` you can use. – Jelmer Keij Apr 12 '16 at 10:26
  • @JelmerKeij yes i kwon is function of activeRecord http://www.yiiframework.com/doc-2.0/yii-db-activerecord.html – scaisEdge Apr 12 '16 at 10:57
3

For one model it's sufficient to use a property attributes

$User = User::find()->one();
$user_as_array = $User->attributes;
German Khokhlov
  • 909
  • 9
  • 13
  • 1
    Thank you! I'm new in Yii2, and it's a few difficult to make chains like `$model->search($request->get())->getModels()[0]->attributes` for example, for debug. Becouse all works via magic methods and IDE can't help. – Aleksej_Shherbak Jul 28 '20 at 09:54