【发布时间】:2023-03-29 14:52:02
【问题描述】:
我注意到,在 Laravel 中(使用 $model->fill(Input::all()) 时,数据如何输入并不重要),空字段(表单中为空)以空字符串 ('') 的形式出现。这是有道理的,因为这就是它从浏览器传递到 HTTP 服务器再到 PHP 的方式。
问题在于,如果列是数字且具有 DEFAULT 值,或者是 NULLable,则从 Eloquent 生成的查询对于列的值具有 '',因此 MySQL 将其解释并输入为0 而不是默认列值或NULL。是我在这里做错了什么,还是我需要投入额外的工作(例如突变器)来检测这个空字符串并转换为 null 以实现我真正想要的?
当然我明白,从技术角度来看,Laravel 在不知道你的列是如何工作的情况下,不能仅仅假设空字符串意味着将 NULL 传递给 INSERT 查询,因为有时你真的想要将字段(特别是基于字符的字段)设置为空字符串,而不是 NULL。
也就是说,我不想仅仅因为我使用$model->fill() 而为我的所有模型定义修改器,但是有什么我不知道我可以做的吗?
对于阅读本文的 MySQL 人员 - 如果通过 '',将数字字段设置为 0 是否正确?似乎它应该被视为NULL,因为它不是明确的0,但我想它可能是弱类型,将'' 等同于0,而不是更远的NULL。
【问题讨论】:
标签: mysql laravel laravel-4 eloquent