Я пытаюсь получить запись из моей базы данных с помощью метода поиска Eloquents, однако он неожиданно возвращает null. Если я запускаю запрос вручную в базе данных, он возвращает ожидаемую запись.
Я использую следующее в Laravel:
$support = Support::find(02155);
И следующее непосредственно в базе данных:
SELECT * FROM support WHERE id = 02155;
Столбец первичного ключа называется «id» с типом smallint (5), unsigned и zerofill вместе с набором автоматического инкремента. Я основывал вышеуказанный «ручной» запрос на документации Laravel в соответствии с тем, что должен выполнять Laravel.
Не сообщалось об ошибках (что я вижу), и если я изменю метод Eloquent на «все», тогда все записи будут правильно возвращены.
Это вызвано тем, что числа, начинающиеся с 0, считаются восьмеричными по PHP, согласно: http://php.net/manual/en/language.types.integer.php
Кажется, что PHP преобразует число в десятичный знак перед выполнением запроса MySQL, что означает, что запрос сформирован с неправильным числом.
Например:
Support::find(02155);
становится:
'SELECT * FROM mytable WHERE id = 1133'
Я решил это, указав число в целое число с помощью (int), прежде чем использовать его с методом поиска Eloquents. Он также будет работать, если вы передадите номер в виде строки (т. Е. В кавычках), например:
Support::find('02155');