Laravel +可以为空的外键

时间:2014-05-03 23:36:58

标签: laravel

我有一个带有下拉选项的表单,可让您为特定型号选择外键。顶部选项总是类似

<option value="">please select</option>

因此,当我使用表单中的数据填充模型时,

$booking = new Booking($data);

并试着保存它,

$booking->save();

它总是失败,因为它违反了FK约束,因为Laravel不够聪明,不能为我取消这个字段。因此我想出了这个小小的黑客:

public function save() {
    if(!$this->vehicle_id) $this->vehicle_id = null;
    if(!$this->driver_id) $this->driver_id = null;
    parent::save();
}

但是没有办法告诉Laravel哪些字段代表FK,如果它们是整数&gt;则应该设置为null。 0?

1 个答案:

答案 0 :(得分:14)

一种可能的解决方案是对所有外键使用set mutators

public function setVehicleIdAttribute($value) {
    $this->attributes['vehicle_id'] = $value ?: null;
}

public function setDriverIdAttribute($value) {
    $this->attributes['driver_id'] = $value ?: null;
}