Yii2 - ActiveRecord 到数组
Posted
技术标签:
【中文标题】Yii2 - ActiveRecord 到数组【英文标题】:Yii2 - ActiveRecord to Array 【发布时间】:2015-09-16 11:40:11 【问题描述】:有什么方法可以将ActiveRecord
转换为 Yii2 中的数组?我知道我们可以为ActiveQuery
执行此操作,例如User::find()->asArray()->one();
,但是我们可以将Model
转换为已经获取的数组吗?我想在 beforeSave()
方法中执行此操作并将该数组存储在缓存中。
【问题讨论】:
【参考方案1】:试试这个!
$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的方式 这个答案更理想 TS 指出:但是我们可以将模型转换为数组当它已经被获取时。所以,这个答案不是很有用。 这应该是选择的答案 这没有回答问题,但很有帮助。【参考方案2】:来自 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);
,
],
]);
【讨论】:
我想补充一点,ActiveRecord 还有一个函数toArray()
,所以$model->toArray()
也可以在获取单个模型后进行转换。
@JelmerKeij 请发布一个适当的相关问题,以便所有 SO 社区都可以帮助你......并最终用这个问题的链接评论我......
嗨@scaisEdge 这不是一个问题,这是额外的信息指出您还可以使用toArray()
功能。
@JelmerKeij yes i kwon 是 activeRecord 的函数 yiiframework.com/doc-2.0/yii-db-activerecord.html【参考方案3】:
对于一个模型,使用 attributes
属性就足够了
$User = User::find()->one();
$user_as_array = $User->attributes;
【讨论】:
谢谢!我是 Yii2 的新手,例如,为了调试,制作像$model->search($request->get())->getModels()[0]->attributes
这样的链有些困难。因为所有工作都是通过魔术方法工作的,IDE 无能为力。以上是关于Yii2 - ActiveRecord 到数组的主要内容,如果未能解决你的问题,请参考以下文章