首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在html表单中将空字符串更新为空字符串。

问在html表单中将空字符串更新为空字符串。
EN

Stack Overflow用户
提问于 2013-10-05 15:27:05
回答 4查看 2.8K关注 0票数 3

我在拉拉维尔建个地盘。

我在InnoDB表中设置了外键约束。

我的问题是,如果我没有在一个,比方说,选择框中选择一个值,框架就会尝试用‘(空字符串)在表中插入或更新一个记录。这将导致MySQL错误,因为它无法在子表中找到等效的外键值。

除了签出每个字段之外,还有什么其他方法可以强制在外键字段中插入NULL吗?还是强迫MySQL接受'‘作为“空”外键引用?

换句话说:我有一个,比如说,选择字段,第一个选项为空白。我选择的是空白选项。当我提交时,会传递一个空字符串“”。显然,在MySQL中,我可以更新表集foreignKey=NULL,但不能更新表集foreignKey='‘。它不会“转换”为空。我可以一个一个地检查字段,但是将每个外键转换为NULL,可能在数组中指定所有字段,我想知道是否有一种更精简的方法来实现这一点。

可能需要在我的DB模式中更改我的操作(没有设置)?

编辑:列确实接受空值,问题在于框架或MySQL如何处理来自MySQL的“空值”。我并不是说MySQL“做错了”,这也是合乎逻辑的,问题是您不能在MySQL或Laravel中设置一个"NULL“值,我想知道是否有一种优雅的方法来管理这个问题。

换句话说,我是否必须手动指定外键并构造相应的查询,还是有另一种健壮而优雅的方法?

到目前为止,我为模型MyModel编写的代码:

代码语言:javascript
复制
$obj = new MyModel;
$obj->fill(Input::all())); // can be all() or a subset of the request fields
$obj->save();
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-05 16:18:23

而不是使用

代码语言:javascript
复制
$obj = new MyModel;
$obj->fill(Input::all())); // can be all() or a subset of the request fields
$obj->save();

使用

代码语言:javascript
复制
$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。

票数 1
EN

Stack Overflow用户

发布于 2014-06-16 01:42:44

至少从Laravel的v4 (和雄辩的模型)开始,您就可以使用变异器(又名setters)来检查值是否为空,并将其转换为null,并将该逻辑很好地放入模型中:

代码语言:javascript
复制
class Anything extends \Eloquent {
    // ...
    public function setFooBarAttribute($value) {
        $this->attributes['foo_bar'] = empty($value)?null:$value;
    }
}

您可以查看doc on mutators。

我一直以这个github issue为导向(不完全相关,但仍然是相关的)。

票数 7
EN

Stack Overflow用户

发布于 2013-10-05 15:37:25

您必须从映射外键的字段中移除“null”属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19199379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档