我尝试使用Laravel Framework中包含的Eloquent ORM在表中插入新记录,得出的insert语句如下:
INSET INTO
table_x
(field_x
,field_y
,field_z
) 价值观(0,1,2)
我从MySQL服务器收到以下错误:
SQLSTATE [HY000]:常规错误:1364字段'字段'没有 默认值
我没有在INSERT语句中提供该字段。该字段的类型为TEXT,来自MySQL文档:" BLOB和TEXT列不能具有DEFAULT值" 。
所以我总是要在我的PHP代码中为TEXT字段提供一个默认值?或者也许Eloquent应该处理这个并在插入时自动设置一个空字符串?
答案 0 :(得分:5)
MySQL不支持在TEXT列中使用默认值。所以你必须手动告诉Laravel / MySQL在该列中放入什么。例如。
INSERT INTO table_x (field_x, field_y, field_z, your_text_field) VALUES (0, 1, 2, "");
或
INSERT INTO table_x (field_x, field_y, field_z, your_text_field) VALUES (0, 1, 2, NULL);
所以在你的Eloquent模型中,你必须做类似的事情。
$myModel->your_text_field = '';
或
$myModel->your_text_field = null;
取决于您是否将列设置为可为空。
更新:作为Mihai Crăiță问题作者在我的回答和in GitHub ticket中发表了评论,我们可以通过这种方式为Eloquent模型中的任何列设置默认值,因此我们不必担心必须一直手动设置。
class MyModel extends Eloquent
{
protected $attributes = array('your_text_field' => '');
...
}