Как сделать 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 для решения проблемы. Но это скорее взлом ИМО.

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


Литература:


EDIT: Я проверил, что это не слой ORM Laravel. Экземпляр PDO уже возвращает идентификаторы в виде строк.

Ответ 1

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

class Post extends Eloquent {

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

}

Ответ 2

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

hhvm.mysql.typed_results = true

Ответ 3

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

'connections' => [
    'mysql' => [
        // ...
        'options' => [
            PDO::ATTR_EMULATE_PREPARES => false
        ]
    ],
]