Я заметил, что мой 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 уже возвращает идентификаторы в виде строк.
Создать аксессор для id
в вашем классе Post.
class Post extends Eloquent {
public function getIdAttribute($value)
{
return (int)$value;
}
}
Вам нужно установить typed_results в вашем файле /etc/hhvm/php.ini.
hhvm.mysql.typed_results = true
Я не настроил HHVM для тестирования, но исправление в PHP должно было бы отключить PDO :: ATTR_EMULATE_PREPARES. Например, в файле конфигурации вашей базы данных добавьте:
'connections' => [
'mysql' => [
// ...
'options' => [
PDO::ATTR_EMULATE_PREPARES => false
]
],
]