Ответ 1
Создайте аксессуар для id
в вашем классе Post.
class Post extends Eloquent {
public function getIdAttribute($value)
{
return (int)$value;
}
}
Я заметил, что мой 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 уже возвращает идентификаторы в виде строк.
Создайте аксессуар для 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
]
],
]