2016-11-09 5 views
1

У меня есть модель драйвера с этим условием:1366 Некорректное десятичное значение Laravel

protected $fillable = [ 
'hourly_rate', 
'ot_hourly_rate', 
'commission_rate', 
'basic_salary', 
'join_date', 
]; 

и вот мой код переноса:

public function up() 
{ 
Schema::table('drivers', function ($table) { 
    $table->integer('hourly_rate', 24,2)->nullable()->default(0); 
    $table->decimal('ot_hourly_rate', 24,2)->nullable()->default(0); 
    $table->decimal('commission_rate', 24,2)->nullable()->default(0); 
    $table->decimal('basic_salary', 24,2)->nullable()->default(0); 
}); 
} 

/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
Schema::table('drivers', function ($table) { 
    $table->dropColumn('hourly_rate'); 
    $table->dropColumn('ot_hourly_rate'); 
    $table->dropColumn('commission_rate'); 
    $table->dropColumn('basic_salary'); 
}); 
} 

проблема, когда я пытаюсь создать драйвер и не заполнять в этом поле указывается десятичное значение ошибки. decimal не может хранить пустую строку как NULL в базе данных?

Примечание: это поле не требуется.

+0

Почему у вас есть значение NULL и значение по умолчанию? Вы хотите, чтобы значение по умолчанию было равно 0 или null при добавлении новой строки? Попробуйте добавить 'default ('0')' и посмотреть, что произойдет. – usrNotFound

ответ

0

Нет необходимости устанавливать обнуляемым, потому что вы установите значение по умолчанию .Try это

$table->decimal('basic_salary', 24,2)->default(0); 
0

Попробуйте это: Available Column Types

public function up() 
{ 
    Schema::table('drivers', function ($table) { 
     $table->integer('hourly_rate')->default(0); 
     $table->decimal('ot_hourly_rate', 24,2)->default(0); 
     $table->decimal('commission_rate', 24,2)->default(0); 
     $table->decimal('basic_salary', 24,2)->default(0); 
    }); 
} 

public function down() 
{ 
    Schema::drop('drivers'); 
} 

Декларация: decimal(p[,s]).

р = Точность - общее количество цифр сохраняются как слева, так и справа от десятичной точки.

s = Масштабировать максимальное количество цифр, хранящихся справа от десятичной точки (необязательно).

Минимальная точность составляет 1 и максимальная точность 38. По умолчанию точность составляет 18.

Примечание: Десятичная эквивалентно Числовой.

more details

+0

У меня такая же проблема и установка его по умолчанию 0 не работает :( – lewis4u

+0

такая же проблема, и, как сказал @ lewis4u, это, похоже, не исправить. –

0

Я столкнулся с этим же вопросом в последнее время, и сложность была с полями ввода.

Отправка этого <input name="ex" type="number" step="0.01" placeholder="0.00"> сделает поле ввода равным "". Независимо от настроек по умолчанию в вашей миграции вы все равно столкнетесь с ошибкой, потому что значение по умолчанию «" не является правильным десятичным.

Я решил просто изменить свои поля ввода, чтобы быть более похожими на это: <input name="ex" type="number" step="0.01" value="0" required> Таким образом, значение по умолчанию - 0, а не «», а обязательное поле предотвращает отправку, если значение по умолчанию удалено и не заменено.

Смежные вопросы