我正在 Laravel 中构建一个网站。
我在 InnoDB 表之间设置了外键约束。
我的问题是,如果我不在选择框中选择值,框架会尝试在表中插入或更新带有“”(空字符串)的记录。这会导致 MySQL 错误,因为它无法在子表中找到等效的外键值。
除了检查每个字段之外,是否有一些优雅的方法可以强制在外键字段中插入 NULL?或者强制 MySQL 接受 '' 作为“空”外键引用?
换句话说:我有一个 SELECT 字段,其中第一个 OPTION 为空。我将选择的选项保留为空白。当我提交时,会传递一个空字符串“”。在MySQL中,显然我可以执行UPDATE table SETforeignKey=NULL,但不能执行UPDATEtableSETforeignKey=''。它不会“转换”为 NULL。我可以逐一检查字段,但是将每个外键的 '' 转换为 NULL,也许在数组中指定所有字段,我想知道是否有更简化的方法来执行此操作。
也许必须更改我的数据库模式中的 ON UPDATE 操作(未设置)?
Edit:列确实接受 NULL 值,问题在于框架或 MySQL 如何处理来自 HTML 的“空值”。我并不是建议MySQL“做错了”,这也是合乎逻辑的,问题是你不能在HTML中设置“NULL”值,我想知道是否有一种优雅的方法来管理这个问题MySQLor拉拉维尔。
换句话说,我是否必须手动指定外键并相应地构造我的查询,或者是否有另一种强大而优雅的方法?
到目前为止,我的模型 MyModel 的代码:
$obj = new MyModel;
$obj->fill(Input::all())); // can be all() or a subset of the request fields
$obj->save();
至少从 Laravel(和 Eloquent 模型)的 v4 开始,您可以使用 mutators(又名 setter)来检查值是否为空并将其转换为 null,并且该逻辑很好地放入模型中:
class Anything extends \Eloquent {
// ...
public function setFooBarAttribute($value) {
$this->attributes['foo_bar'] = empty($value)?null:$value;
}
}
您可以查看关于变异者的文档 http://laravel.com/docs/eloquent#accessors-and-mutators.
我已以此为导向github问题 https://github.com/FrozenNode/Laravel-Administrator/issues/475(不完全相关,但仍然)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)