格式化MySQL在CakePHP中选择关联数组

时间:2012-01-13 16:41:18

标签: php mysql cakephp associative

我喜欢CakePHP如何自动遍历MySQL查询的结果并将它们格式化为漂亮的地图。

以下是我正在使用的示例查询:

# Inside some model
return $this->query("

  SELECT 
    Profile.id,
    SUM( IF( HOUR(Log.event_one) > 3, 1, 0 ) ) as EventOne

  FROM profiles Profile
  JOIN logs Log ON Log.id = Profile.log_id

  WHERE Profile.id = {$pUserId}
");

CakePHP将返回如下结果的地图:

array
  0
    array
      'Profile'
          array
            'id' => 23
      '0'
          array
            'EventOne' => 108
  1
    array
      'Profile'
          array
            'id' => 23
      '0'
          array
            'EventOne' => 42
  2
    ...

我要做的是让结果像这样:

array
  'Profile'
      array
        'id' => 23

  'Events'
  #   ^   I want to be able to specify this key
      array
        'EventOne' => 108

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你不能直接这样做

顶级数组键是从mysql表示该字段所涉及的表名派生的 - 在您的情况下,它是一个计算字段,因此(根据mysql)属于无表 - 因此是0数组键。

后期处理

然而,你可以做的是对结果进行后处理,使其成为你想要的格式:

public function getStuff() {
    // The query call in the question can very easily be a normal find call
    $return = $this->query("don't use query unless you have no choice");

    foreach($return as &$row) {
        $row['Events'] = $row[0];
        unset($row[0]);
    }

    return $return;
}