Я сейчас создаю приложение Symfony / Doctrine, и одна модель имеет следующую структуру:
Session:
columns:
session_id:
type: integer(8)
primary: true
autoincrement: true
session_number:
type: string(30)
Это правильно отображается в базе данных как:
CREATE TABLE `session` (
`session_id` bigint(20) NOT NULL AUTO_INCREMENT,
`session_number` varchar(30) NOT NULL,
Так что мы в безопасности.
Затем при попытке создать новую запись код выглядит так:
$newSession = new Session();
$newSession->session_number = session_id();
$newSession->save();
//...
echo $newSession->session_id; //<------ this will return a string '1'
Последняя строка является проблемной. Поле session_id заполняется последним значением идентификатора, но в виде строки !!
Итак, сначала я думал, что виновата доктрина, но затем, отлаживая код, я обнаружил, что кажется, что PDO на самом деле возвращает значение в виде строки. Вызываемый метод:
dbh->lastInsertId()
Итак, очевидный вопрос: как я могу решить это? . Я нашел эти вещи в интернете, но еще не пробовал:
- PDO :: ATTR_STRINGIFY_FETCHES. Будет ли это работать? Если да, как я могу это настроить?
- Использование собственного драйвера mysql вместо pdo. Однако доктрина справляется с этим, поэтому я не уверен, смогу ли я вообще это настроить.
- Другим очевидным обходным решением является приведение типа к int: (int) $ session-> session_id. Но это просто безобразно, так как должно возвращать целочисленное значение (в этом и заключается цель использования pdo и доктрины!), И все другие модели будут иметь такую же проблему.
- Что было бы лучшим решением для этого?