【问题标题】:Yii2 - ActiveRecord to ArrayYii2 - ActiveRecord 到数组
【发布时间】:2015-09-16 11:40:11
【问题描述】:

有什么方法可以将ActiveRecord 转换为 Yii2 中的数组?我知道我们可以为ActiveQuery 执行此操作,例如User::find()->asArray()->one();,但是我们可以将Model 转换为已经获取的数组吗?我想在 beforeSave() 方法中执行此操作并将该数组存储在缓存中。

【问题讨论】:

    标签: yii2


    【解决方案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 无能为力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 2016-10-16
    相关资源
    最近更新 更多