【发布时间】:2017-05-31 17:06:51
【问题描述】:
我正在使用 Laravel 构建一个中型系统。它有大约 120 个表,其中可能有 70 个表有 CRUD。我对所有这些 CRUDS 都有疑问。每次我有不是字符串类型的可空字段时,我都必须定义这种类型的突变器:
public function setCollectionIdAttribute($value)
{
$this->attributes['collection_id'] = $value ?: null;
}
public function setCompletedAtAttribute($value)
{
$this->attributes['completed_at'] = $value ?: null;
}
我必须这样做,因为在前端表单字段不是必需的,因此如果用户不填写该字段,则后端接收的值是空字符串,因此当它尝试将其保存到数据库类型时抛出错误,所以我上面列出的函数检查值并将它们设置为 null。
Laravel 是否提供了更好的方法来做到这一点?因为我有很多表单,而且每次我有一个非字符串类型的可空字段时都必须定义这些函数并不酷。
【问题讨论】:
-
是的,它在 MySQL(或 Laravel 支持的任何其他数据库)中称为默认值。
-
默认值不能解决问题。问题是 Laravel 试图在非字符串类型的字段中插入一个空字符串(“”)。顺便说一句,每次您定义一个可为空的字段时,它都会将默认值设置为空。
-
我看到了你的挣扎,在 MySQL 中使用默认值并更改请求数据,如果你有任何空字符串,请从数组中删除此类属性。
-
@Kyslik 可能会让您在发表讽刺评论之前仔细研究该问题。
-
也许这可能是一种方式..通过一些将空字符串值更改为空值的函数发送请求..我会检查是否可以将它放在将在每个请求中执行的某个地方所以我没写很多次