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 到数组的主要内容,如果未能解决你的问题,请参考以下文章

yii2 使用 ActiveRecord 批量插入

yii2之ActiveRecord 模型

Yii2 错误 - 找不到类 'yii\mongodb\ActiveRecord'

Yii2:具有不同查询的 ActiveRecord

yii2 数据库和ActiveRecord

yii2 basic版 MVC 部分