【发布时间】:2014-01-02 07:29:23
【问题描述】:
我在 Laravel 4 迁移中创建了一个列,如下所示:
public function up()
{
Schema::create(
'templates',
function (Blueprint $table) {
$table->increments('id');
// Omitted fields...
$table->smallInteger('pages')->default(0);
$table->timestamps();
$table->softDeletes();
}
);
}
当我尝试使用
保存实体时$entity->save();
在我的控制器中,当字段值为空时,该特定列出现错误:
SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'pages' at row 1
我可以通过在模型中创建一个 mutator 来解决这个问题,如下所示:
public function setPagesAttribute($value)
{
if (empty($value)) {
$this->attributes['pages'] = 0;
}
}
但无论如何,Laravel / Eloquent 不应该这样做吗?
我只是在想,我在这里做错了什么......
【问题讨论】:
-
我假设您可以在架构中添加 ->nullable() 并尝试?
-
@petkostas "nullable" 不应在此处使用,因为他希望该值默认为 0。仅当列没有值有意义时才使用可空列,但 0 是更适合数字字段,这样他在使用该值时就不需要在代码中检查 NULL(取决于他希望代码做什么;null 可能是合适的)。
-
我只在我的 Mac 上得到这个,当我们部署我们的代码时,它不会发生在我们的 Ubuntu 测试机器上。这似乎是 MySQL 配置问题。
标签: mysql laravel laravel-4 eloquent