Yii2使用ArrayHelper :: toArray()将模型对象转换为数组

问题描述 投票:0回答:2

我在以下查询中使用YII2 Framework

SELECT T.id, T.name, T.status, IFNULL(T.image,'no-image.png') as DP
FROM TABLE_NAME T;

这是我的代码

$modelTeam = Teams::find()
    ->select(['T.id', 'T.name', 'T.status', 'IFNULL(T.image,"no-image.png") as DP'])
    ->from('{{%teams}} T')->all();

编辑:结果集根本不包括DP列,为什么会这样,我该怎么做。


编辑2:虽然告诉结果不包括DP列,但我错过了一条重要信息,我使用ArrayHelper::toArray()将模型对象转换为数组,然后迭代它

$results=ArrayHelper::toArray($modelTeam);
php yii2 yii2-advanced-app yii2-model
2个回答
0
投票

要在带有Yii2的选择中使用IFNULL,您必须创建一个新表达式。

$modelTeam = Teams::find()
    ->select(['T.id', 'T.name', 'T.status'])
    ->addSelect([new Expression('IFNULL(T.image,"no-image.png") as DP')])
    ->from('{{%teams}} T')
    ->all()

0
投票

实际的问题不是我想的那样,查询没问题,我使用ArrayHelper::toArray($modelTeam)方法将模型对象转换为数组以进一步迭代数组并显示所有记录,这就是问题所在,我需要使用ArrayHelper::toArray()的第二个参数。第二个参数转换每个类的映射,因为它有问题显示模型的public propertiesDPpublic中声明Teams Model

$modelTeam = Teams::find()->
    select(['TM.id', 'TM.name', 'TM.status'])
    ->addSelect([new \yii\db\Expression('IFNULL(TM.image,\'no-image.png\') AS DP')])
    ->from('{{%teams}} TM')->all();

$results = ArrayHelper::toArray($modelTeam, [
    'common\models\Teams' => [
        'id',
        'name',
        'status',
        'DP',
    ],
]);
© www.soinside.com 2019 - 2024. All rights reserved.