Форматировать MySQL Select в ассоциативный массив в CakePHP
Мне нравится, как 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
Есть идеи?
3
Author: rodrigo-silveira, 2012-01-13
1 answers
Вы не можете сделать это напрямую
Ключи массива верхнего уровня получены из имени таблицы, к которой, по словам 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;
}
0
Author: AD7six, 2013-01-15 11:43:17