我应该总是在php中为mysql中的TEXT字段提供默认值

时间:2014-06-23 08:18:03

标签: php mysql laravel eloquent

我尝试使用Laravel Framework中包含的Eloquent ORM在表中插入新记录,得出的insert语句如下:

  

INSET INTO table_xfield_xfield_yfield_z)   价值观(0,1,2)

我从MySQL服务器收到以下错误:

  

SQLSTATE [HY000]:常规错误:1364字段'字段'没有   默认值

我没有在INSERT语句中提供该字段。该字段的类型为TEXT,来自MySQL文档:" BLOB和TEXT列不能具有DEFAULT值"

所以我总是要在我的PHP代码中为TEXT字段提供一个默认值?或者也许Eloquent应该处理这个并在插入时自动设置一个空字符串?

1 个答案:

答案 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' => '');

    ...
}