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

Yii2 Converting model objects to array with ArrayHelper::toArray()

我正在 YII2 框架中处理以下查询

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);

要在 Yii2 的 select 中使用 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()

实际问题出在我想的不对,查询没问题,我用ArrayHelper::toArray($modelTeam)方法将模型对象转为数组,进一步遍历数组,显示所有记录,这就是问题所在。

我需要为 ArrayHelper::toArray() 使用第二个参数 $properties。第二个参数转换每个 class 的属性映射,因为它在显示模型的自定义声明的 public 属性时存在问题,并且 DP 在 [=17= 中声明为 public ] 模型,因为它是 ActiveRecrod 查询中的别名。

$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',
    ],
]);
$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();
$arrTeam = $modelTeam->asArray()->all();