我在以下查询中使用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);
要在带有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()
实际的问题不是我想的那样,查询没问题,我使用ArrayHelper::toArray($modelTeam)
方法将模型对象转换为数组以进一步迭代数组并显示所有记录,这就是问题所在,我需要使用ArrayHelper::toArray()
的第二个参数。第二个参数转换每个类的映射,因为它有问题显示模型的public properties
和DP
在public
中声明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',
],
]);