【发布时间】:2015-09-16 11:40:11
【问题描述】:
有什么方法可以将ActiveRecord 转换为 Yii2 中的数组?我知道我们可以为ActiveQuery 执行此操作,例如User::find()->asArray()->one();,但是我们可以将Model 转换为已经获取的数组吗?我想在 beforeSave() 方法中执行此操作并将该数组存储在缓存中。
【问题讨论】:
标签: yii2
有什么方法可以将ActiveRecord 转换为 Yii2 中的数组?我知道我们可以为ActiveQuery 执行此操作,例如User::find()->asArray()->one();,但是我们可以将Model 转换为已经获取的数组吗?我想在 beforeSave() 方法中执行此操作并将该数组存储在缓存中。
【问题讨论】:
标签: yii2
试试这个!
$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();
【讨论】:
来自 Yii2 guide - 使用 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);
},
],
]);
【讨论】:
toArray(),所以$model->toArray() 也可以在获取单个模型后进行转换。
toArray() 功能。
对于一个模型,使用 attributes 属性就足够了
$User = User::find()->one();
$user_as_array = $User->attributes;
【讨论】:
$model->search($request->get())->getModels()[0]->attributes 这样的链有些困难。因为所有工作都是通过魔术方法工作的,IDE 无能为力。