【问题标题】:Update with default values for non nullable fields使用不可为空字段的默认值进行更新
【发布时间】:2018-04-28 21:54:39
【问题描述】:

我的表sample中有一个字段,有默认值,但是这个字段不接受NULL的值。

当我更新我的表单时,如果我将这些字段留空

$model->update($request->all()); 

返回错误

列'sample'不能为空(SQL:更新mytable设置updated_at = 2018-04-28 11:13:46, sample = , name= '测试' 其中id = 1)

使用未填充字段的默认值更新模型的最佳方法是什么?

【问题讨论】:

  • 如果数据库中的字段可以为空,为什么不加一个->nullable();条款吗?这不就是它存在的原因吗?

标签: laravel


【解决方案1】:

您可以使用数组过滤功能过滤 $request 数组以去除空输入值:

$model->update(array_filter($request->all())); 

【讨论】:

  • @user866933 如果答案是您想要的,请将其标记为最佳答案。以防其他人可以毫无困难地找到答案。
  • 这也会删除像false0"0"这样的值。
  • @JonasStaudenmeir 我回答这个问题取决于用户的需要。在这种情况下,它是正确的答案。也许在某些情况下,你的答案会更好。
【解决方案2】:

我认为您首先检查您的 sample 字段获取 null 然后设置默认值。

if (empty($request->get('sample', null))) {
    $request->replace(['sample' => '-- Your default value --']);
}

那么,

$model->update($request->all());

谢谢。

【讨论】:

    【解决方案3】:

    使用它从您的输入中删除 null 值:

    $input = array_filter($request->all(), function($value) {
        return !is_null($value);
    });
    $model->update($input); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      相关资源
      最近更新 更多