我在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);
答案 0 :(得分: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()
答案 1 :(得分:0)
实际问题不是我想的那样,查询没问题,我使用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',
],
]);
答案 2 :(得分:0)
$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();