Как заставить драйвер MySQL для HHVM возвращать идентификаторы в виде целых чисел?

Я заметил, что мой Laravel API не возвращает идентификаторы сущностей (первичные ключи) в виде целых чисел.

В Api \ PostController.php :: show ():

function index()
{
$posts = Post::all();

return $posts;
}

Который возвращает что-то вроде:

[{
"id": "1",
"title": "Post one",
...
},{
"id": "2",
"title": "Post two",
...
}]

Это портит мою сортировку таблицы (потому что идентификаторы будут отсортированы как строки: 1, 10, 11, 2 и т. Д.).

Сброс самой сущности также показывает, что id Атрибут является строкой.

Как уже упоминалось Вот вероятная причина в том, что драйвер MySQL не возвращает значения в соответствующем типе.

Я использую HHVM 3.3.1 на сервере Ubuntu 14.04. Можно ли как-нибудь использовать нативную библиотеку MySQL (например, php5-mysqlnd) для HHVM?

Я мог бы использовать Модель Laravel решить проблему. Но это больше взломать IMO.

Пожалуйста помоги!


Рекомендации:


РЕДАКТИРОВАТЬ: Я убедился, что это не слой ORM Laravel. Экземпляр PDO уже возвращает идентификаторы в виде строк.

11

Решение

Создать аксессор для id в вашем классе Post.

class Post extends Eloquent {

public function getIdAttribute($value)
{
return (int)$value;
}

}
1

Другие решения

Вам нужно установить typed_results в вашем файле /etc/hhvm/php.ini.

hhvm.mysql.typed_results = true

1

Я не настроил HHVM для тестирования, но исправление в PHP должно было бы отключить PDO :: ATTR_EMULATE_PREPARES. Например, в файле конфигурации вашей базы данных добавьте:

'connections' => [
'mysql' => [
// ...
'options' => [
PDO::ATTR_EMULATE_PREPARES => false
]
],
]
-1
По вопросам рекламы [email protected]