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.
Add a comment
|
3 Answers
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();
6 Comments
sasori
this is a more yii2 way
dzona
This answer is far more optimal
Boolean_Type
TS noted: But can we convert Model to Array when it is already fetched. So, that answer is not very useful.
Muhammad Omer Aslam
this should have been the selected answer
Harijs Krūtainis
This did not answer the question, yet was very helpfull.
|
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
Jelmer Keij
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.ScaisEdge
@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 ..
Jelmer Keij
Hi @scaisEdge it's not a question, it's extra information to point out that there's also the function
toArray() you can use.ScaisEdge
@JelmerKeij yes i kwon is function of activeRecord yiiframework.com/doc-2.0/yii-db-activerecord.html
For one model it's sufficient to use a property attributes
$User = User::find()->one();
$user_as_array = $User->attributes;
1 Comment
Aleksej_Shherbak
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.