2012-04-13 1 views
2

Когда я делаю find или fetch, возвращаемый массив значений содержит строковые представления всех моих столбцов, независимо от типа данных столбца. Это означает, что вместо целочисленных столбцов возвращаются как:Как получить целочисленные значения для целых столбцов в CakePHP?

array('field1' => 1) 

они в конечном итоге, как

array('field1' => '1') 

Это ожидаемое поведение для CakePHP? Я что-то неправильно понял?

Я думал о написании кода в методе afterfind моих моделей для вызова intval в соответствующих столбцах, но это действительно лучшее решение? Имеет ли CakePHP лучший способ обработки столбцов без строки?

+0

Почему вы должны использовать целочисленные значения? – burzum

+0

Я выводил данные как JSON для веб-приложения, которое ожидает целые числа, а не строки. –

+0

Ну тогда посмотри мой ответ. ;) – burzum

ответ

1

Вы можете определить, какое поле поле в таблице ваша модель из модели. Model :: _ schema. На основании этого вы можете ввести значения для своих полей в обратном вызове Model::afterFind().

Вы также можете вручную проверить поля, которые должны быть целыми, но с помощью _schema позволит вам автоматизировать его. Вы можете сделать это как поведение, например, и прикрепить его к каждой модели, которая нуждается в этой функции.

Так просто перебирайте результаты и проверяйте поля, которые вы хотите быть целыми, и введите их.

+0

Да, это похоже на лучшее решение. Я просто удивлен тем, что CakePHP не делает это автоматически. –

+0

Потому что это просто добавит дополнительные накладные расходы, которые на 99% никогда не нужны. У меня не было случая за все годы, которые я делаю * веб-приложения, которые я должен был набирать для вывода. Кстати: у меня была еще лучшая идея: Type привёл результат JSON в javascript. Это переместит эту работу на клиентский CPU :) – burzum

1

Я тоже это заметил, и, по-видимому, это результат PDO, переводящего все в строку. Я представил ticket и, надеюсь, в будущем может быть функция автоматического включения функции принуждения.

Хотя клиенты могут преобразовывать данные, это не очень «чисто», особенно если вы можете предоставить api сторонним разработчикам.

+0

да, это хороший билет. это, вероятно, будет принято. – mark