Laravel приведение не работает на двойные и десятичные установки на нули - PullRequest
0 голосов
/ 22 января 2020

У меня есть 2 decimal(10,8) поля на mysql с этой миграцией:

$table->decimal('lat', 10, 8)->nullable();
$table->decimal('lng', 10, 8)->nullable();

Через конечную точку API я нахожу широту и долготу.

API возвращает это:

$geo->lat = 46.0081326;
$geo->lng = 8.9761892;

НО при настройке моего поля модели следующим образом:

$estate->lat = $geo->lat;
$estate->lng = $geo->lng;

в БД для полей устанавливается значение 46.00000000 и 8.00000000.

Из-за этого Я попытался установить приведение в модели следующим образом:

protected $casts = ['lat' => 'double', 'lng' => 'double'];

Я также попытался привести к определению c десятичное

protected $casts = ['lat' => 'decimal:8', 'lng' => 'decimal:8'];

Но не повезло. Я по-прежнему получаю 46.00000000 и 8.00000000 внутри БД.

Я также пытался удалить Laravel casts и принудительно заставить тип как этот

$estate->lat = (double) $geo->lat;

Но я все еще становлюсь пустым десятичные точки.

Это 2 новых новых столбца, но я попытался проверить, есть ли в приложении мутатор setLatAttribute(), но его нет.

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Проблема не была связана с приведением или набором текста, а скорее с неправильным именем класса.

Я забыл переименовать имя класса в правильное (SmootherCommand в SmootherCommand.php), и это вызвало плохое поведение.

0 голосов
/ 22 января 2020

Ваша база данных содержит тип данных в виде десятичного числа (что хорошо!), Но ваше приложение пытается прочитать это десятичное число как число с плавающей запятой.

Вы должны быть в состоянии указать приложению продолжить чтение данные в виде десятичной дроби:

protected $casts = ['lat' => 'decimal:8'];

Если вы полагаетесь на функциональность Laravel $casts, вам не нужно принудительно вводить тип где-либо еще в коде, это может привести вас ко всем видам неприятных проблем, которые невероятно сложно отлаживать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...