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

Mih*_*iță 2 php mysql laravel eloquent

我尝试使用Laravel Framework附带的Eloquent ORM在表中插入新记录,结果插入语句如下:

嵌入到table_xfield_xfield_yfield_z)VALUES(0,1,2)

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

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

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

因此,我总是必须在TEXT字段的php代码中为自己提供默认值?或者,也许Eloquent应该处理此问题并在插入时自动设置一个空字符串?

Unn*_*wut 5

MySQL不支持在TEXT列中具有默认值。因此,您必须手动告诉Laravel / MySQL在该列中输入什么。例如。

INSERT INTO table_x (field_x, field_y, field_z, your_text_field) VALUES (0, 1, 2, "");
Run Code Online (Sandbox Code Playgroud)

要么

INSERT INTO table_x (field_x, field_y, field_z, your_text_field) VALUES (0, 1, 2, NULL);
Run Code Online (Sandbox Code Playgroud)

因此,在您的口才模型中,您将必须执行类似的操作。

$myModel->your_text_field = '';
Run Code Online (Sandbox Code Playgroud)

要么

$myModel->your_text_field = null;
Run Code Online (Sandbox Code Playgroud)

取决于您是否已将列设置为可为空。


更新:作为Mihai Cr?i ?? 问题作者在我的答案中进行了评论,在GitHub票证中,我们可以通过这种方式为Eloquent模型中的任何列设置默认值,因此我们不必担心总是需要手动设置。

class MyModel extends Eloquent
{
    protected $attributes = array('your_text_field' => '');

    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!我在我的模型中添加了以下数组: protected $attributes = array( 'field' => '' ); (2认同)