我正在 Laravel 中建立一个站点。
我在 InnoDB 表之间设置了外键约束。
我的问题是,如果我没有在选择框中选择值,则框架会尝试使用“”(空字符串)在表中插入或更新记录。这会导致 MySQL 错误,因为它无法在子表中找到等效的外键值。
除了检查每个字段之外,是否有一些优雅的方法可以强制在外键字段中插入 NULL?或者强制 MySQL 接受 '' 作为“null”外键引用?
换句话说:我有一个 SELECT 字段,其中第一个 OPTION 为空白。我选择了空白选项。当我提交时,传递了一个空字符串''。在 MySQL 中,显然我可以执行 UPDATE table SET foreignKey=NULL 但不能执行 UPDATE table SET foreignKey=''。它不会“转换”为 NULL。我可以一个一个地检查字段,但是将每个外键的 '' 转换为 NULL,也许在一个数组中指定所有这些字段,我想知道是否有更简化的方法来执行此操作。
也许必须在我的数据库模式中更改我的 ON UPDATE 操作(未设置)?
编辑:列确实接受 NULL 值,问题在于框架或 MySQL 如何处理来自 HTML 的“空值”。我不是在暗示 MySQL“做错了”,这也是合乎逻辑的,问题是您不能在 HTML 中设置“NULL”值,我想知道是否有一种优雅的方法来管理这个问题MySQL或Laravel。
换句话说,我是否必须手动指定外键并相应地构造我的查询,还是有另一种健壮而优雅的方式?
到目前为止,我的模型 MyModel 的代码:
$obj = new MyModel;
$obj->fill(Input::all())); // can be all() or a subset of the request fields
$obj->save();