32

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.

3 Answers 3

59

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();
Sign up to request clarification or add additional context in comments.

6 Comments

this is a more yii2 way
This answer is far more optimal
TS noted: But can we convert Model to Array when it is already fetched. So, that answer is not very useful.
this should have been the selected answer
This did not answer the question, yet was very helpfull.
|
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);
        },
    ],
]);

4 Comments

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.
@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 ..
Hi @scaisEdge it's not a question, it's extra information to point out that there's also the function toArray() you can use.
@JelmerKeij yes i kwon is function of activeRecord yiiframework.com/doc-2.0/yii-db-activerecord.html
7

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

$User = User::find()->one();
$user_as_array = $User->attributes;

1 Comment

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.