我有这种情况的驱动程序模型:
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 :(得分:0)
无需设置可为空,因为您设置了默认值。请尝试此
$table->decimal('basic_salary', 24,2)->default(0);
答案 1 :(得分:0)
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]).
p =精确度 - 存储在小数点左侧和右侧的总位数。
s =缩放存储在小数点右侧的最大位数(可选)。
最小精度为1,最大精度为38.默认精度为18。
注意:十进制等效于数字。
答案 2 :(得分:0)
我最近遇到了同样的问题,复杂的问题出在我的输入字段上。
提交此内容
<input name="ex" type="number" step="0.01" placeholder="0.00">
会使输入字段等于&#34;&#34;。无论迁移中的默认设置如何,您都会因为默认设置而遇到错误
&#34;&#34;不是一个正确的小数。
我选择简单地将输入字段更改为更像这样,
<input name="ex" type="number" step="0.01" value="0" required>
这样默认值为0而不是&#34;&#34;,如果删除默认值而不替换默认值,则必填字段会阻止提交。