3

我喜欢 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

有任何想法吗?

4

1 回答 1

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;
}
于 2013-01-15T11:43:17.703 回答