- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在 Laravel 中构建一个站点。
我在 InnoDB 表之间设置了外键约束。
我的问题是,如果我不在选择框中选择一个值,框架会尝试在带有“”(空字符串)的表中插入或更新记录。这会导致 MySQL 错误,因为它无法在子表中找到等效的外键值。
除了检查每个字段之外,是否有一些优雅的方法可以强制在外键字段中插入 NULL?或者强制 MySQL 接受 '' 作为“空”外键引用?
换句话说:我有一个 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();
最佳答案
至少从 Laravel 的 v4(和 Eloquent 模型)开始,您可以使用 mutators(又名 setters)来检查值是否为空并将其转换为 null,并且该逻辑很好地放入模型中:
class Anything extends \Eloquent {
// ...
public function setFooBarAttribute($value) {
$this->attributes['foo_bar'] = empty($value)?null:$value;
}
}
您可以查看 doc on mutators .
我一直以此为导向 github issue (不完全相关但仍然相关)。
关于mysql - 以html形式将空字符串更新为NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19199379/
我正在尝试创建一个程序,其中字符串的前三个字符重复给定次数,如下所示: foo('Chocolate', 3) # => 'ChoChoCho' foo('Abc', 3) # => 'AbcAbcA
我有以下字符串: std::string str = "Mode:AAA:val:101:id:A1"; 我想分离一个位于 "val:" 和 ":id" 之间的子字符串,这是我的方法: std::st
DNA 字符串可以是任意长度,包含 5 个字母(A、T、G、C、N)的任意组合。 压缩包含 5 个字母(A、T、G、C、N)的 DNA 字母串的有效方法是什么?不是考虑每个字母表 3 位,我们可以使用
是否有一种使用 levenstein 距离将一个特定字符串与第二个较长字符串中的任何区域进行匹配的好方法? 例子: str1='aaaaa' str2='bbbbbbaabaabbbb' if str
使用 OAuth 并使用以下函数使用我们称为“foo”(实际上是 OAuth token )的字符串加密 key public function encrypt( $text ) { // a
我是一名优秀的程序员,十分优秀!