【问题标题】:Update Nova resource with a empty string as default for field使用空字符串作为字段的默认值更新 Nova 资源
【发布时间】:2019-12-12 21:14:37
【问题描述】:

我有一个现有的数据模型,它有一个唯一的索引字符串字段,默认为空字符串。

我在模型中添加了一个 $attributes 属性,以便在创建新对象时将其默认为空字符串。效果很好。

但是,当更新对象并且字段保持为空时,它将失败,因为该字段返回为 null 并且 DB 字段不可为空。我不确定使该字段为空()的影响。代码太多,无法修改。

我想我可以观察一个事件,并将值从 null 更改为空字符串,但我宁愿在 Nova 中处理这个。

有没有办法告诉 Nova 一个空字段应该保存为一个空字符串?

【问题讨论】:

    标签: laravel-nova


    【解决方案1】:

    短版:没有。

    长版: 这不能在 Nova 中设置。一个空字符串将在 HTTP 请求中作为 null 传递。这种行为是 Laravel 核心的一部分。确保它不会作为空字符串从 Nova 传递的唯一方法是对其进行表单验证并使其成为必填字段。

    如果您不介意在 Laravel 应用级别更改代码,您可以通过删除应用内核中的 ConvertEmptyStringsToNull 中间件来禁用此行为。

    /app/Http/Kernel.php

    protected $middleware = [
        ...
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, // remove this line
    ];
    

    但是,如果 DB 字段不可为空,则该字段必须有一个值,对吧?我建议在模型上放置一个访问器来检查空值:

    public function setMyFieldAttribute($val)
    {
        $this->attributes['my_field'] = $val ?? '';
    }
    

    或者,如果您想确定它始终有一个值,请为保存事件添加一个观察者(正如您已经提到的),并确保该字段在数据实际保存之前有一个值。

    【讨论】:

      猜你喜欢
      • 2020-01-07
      • 1970-01-01
      • 2021-12-11
      • 2022-01-22
      • 1970-01-01
      • 2019-12-11
      • 1970-01-01
      • 2019-12-08
      • 2011-08-25
      相关资源
      最近更新 更多