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 に答える