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();
我正在 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();