我在拉拉维尔建个地盘。
我在InnoDB表中设置了外键约束。
我的问题是,如果我没有在一个,比方说,选择框中选择一个值,框架就会尝试用‘(空字符串)在表中插入或更新一个记录。这将导致MySQL错误,因为它无法在子表中找到等效的外键值。
除了签出每个字段之外,还有什么其他方法可以强制在外键字段中插入NULL吗?还是强迫MySQL接受'‘作为“空”外键引用?
换句话说:我有一个,比如说,选择字段,第一个选项为空白。我选择的是空白选项。当我提交时,会传递一个空字符串“”。显然,在MySQL中,我可以更新表集foreignKey=NULL,但不能更新表集foreignKey='‘。它不会“转换”为空。我可以一个一个地检查字段,但是将每个外键转换为NULL,可能在数组中指定所有字段,我想知道是否有一种更精简的方法来实现这一点。
可能需要在我的DB模式中更改我的操作(没有设置)?
编辑:列确实接受空值,问题在于框架或MySQL如何处理来自MySQL的“空值”。我并不是说MySQL“做错了”,这也是合乎逻辑的,问题是您不能在MySQL或Laravel中设置一个"NULL“值,我想知道是否有一种优雅的方法来管理这个问题。
换句话说,我是否必须手动指定外键并构造相应的查询,还是有另一种健壮而优雅的方法?
到目前为止,我为模型MyModel编写的代码:
$obj = new MyModel;
$obj->fill(Input::all())); // can be all() or a subset of the request fields
$obj->save();发布于 2013-10-05 16:18:23
而不是使用
$obj = new MyModel;
$obj->fill(Input::all())); // can be all() or a subset of the request fields
$obj->save();使用
$obj = new MyModel;
$obj->fieldName1 = Input::get('formField1');
$obj->fieldName2 = Input::has('formField2') && Input::get('formField2') == 'someValue' ? Input::get('formField2') : null;
// ...
$obj->save();并确保数据库field接受null值。此外,还可以从null中将默认值设置为database/phpmyadmin。
发布于 2014-06-16 01:42:44
至少从Laravel的v4 (和雄辩的模型)开始,您就可以使用变异器(又名setters)来检查值是否为空,并将其转换为null,并将该逻辑很好地放入模型中:
class Anything extends \Eloquent {
// ...
public function setFooBarAttribute($value) {
$this->attributes['foo_bar'] = empty($value)?null:$value;
}
}您可以查看doc on mutators。
我一直以这个github issue为导向(不完全相关,但仍然是相关的)。
发布于 2013-10-05 15:37:25
您必须从映射外键的字段中移除“null”属性。
https://stackoverflow.com/questions/19199379
复制相似问题