【问题标题】:Should I always provide default value in php for TEXT fields in mysql我是否应该始终在 php 中为 mysql 中的 TEXT 字段提供默认值
【发布时间】:2014-06-23 08:18:02
【问题描述】:

我尝试使用 Laravel 框架中包含的 Eloquent ORM 在表中插入一条新记录,插入语句结果如下:

插入table_x (field_x, field_y, field_z) 值(0、1、2)

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

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

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

所以我总是必须在我的 php 代码中为 TEXT 字段提供一个默认值?或者也许 Eloquent 应该解决这个问题并在插入时自动设置一个空字符串?

【问题讨论】:

  • 请提供您的表格架构
  • 请在您的控制器中添加您的模型的填充和保存代码。也许您应该为模型中的空字段添加默认值。
  • 我在模型中添加了默认值:protected $attributes = array('field' => '');

标签: php mysql laravel eloquent


【解决方案1】:

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

    ...
}

【讨论】:

  • 谢谢!我在我的模型中添加了以下数组:protected $attributes = array( 'field' => '' );
猜你喜欢
  • 1970-01-01
  • 2021-10-26
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
  • 2012-06-20
  • 2012-01-23
  • 1970-01-01
相关资源
最近更新 更多