Формат MySQL Select в ассоциативный массив в CakePHP - PullRequest
3 голосов
/ 13 января 2012

Мне нравится, как 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
  'Profile'
      array
        'id' => 23

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

Есть идеи?

1 Ответ

0 голосов
/ 15 января 2013

Вы не можете сделать это напрямую

Ключи массива верхнего уровня получены из имени таблицы, к которой 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;
}
...