首页 文章

Laravel可以为空的外键

提问于
浏览
6

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

<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,如果它们的整数> 0,则应该设置为null?

1 回答

  • 14

    一种可能的解决方案是将set mutators用于所有外键:

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

相关问题