【问题标题】:Yii2 Converting model objects to array with ArrayHelper::toArray()Yii2 使用 ArrayHelper::toArray() 将模型对象转换为数组
【发布时间】:2016-10-31 21:52:55
【问题描述】:

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

【问题讨论】:

    标签: php yii2 yii2-advanced-app yii2-model


    【解决方案1】:

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

    我需要为ArrayHelper::toArray() 使用第二个参数$properties。第二个参数转换每个类的属性映射,因为它无法显示模型的自定义声明 public 属性,并且 DPTeams 模型中声明为 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',
        ],
    ]);
    

    【讨论】:

      【解决方案2】:
      $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();
      

      【讨论】:

      • 请补充说明你做了什么
      • 重点是我们可以在模型对象之后添加->asArray()->all()。然后我们可以将结果 $arrTeam 用作通用数组,如 $arrTeam[0]['name']。不确定别名“DP”,但希望它有效。
      • 请通过编辑在问题中添加解释。
      【解决方案3】:

      要在 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()
      

      【讨论】:

      • 使用 addSelect 并将新表达式放入数组中?输出是什么?
      • 这里是完整的代码` $modelTeam = Teams::find()-> select( ['T.id','T.name','T.status'] ) ->addSelect( [new \yii\db\Expression('IFNULL(T.image,\'no-image.png\') AS DP')])-> from('{{%teams}} T')->all( ); print_r(ArrayHelper::toArray($modelTeam));` 输出Array ( [0] => Array ( [id] => 1 [name] => Pirates [status] => active ) )
      猜你喜欢
      • 2016-11-01
      • 2015-02-13
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 2017-03-18
      • 2011-01-19
      • 2021-09-09
      • 1970-01-01
      相关资源
      最近更新 更多