【问题标题】:Can't give default value to database text field in laravel app (mysql) [duplicate]无法为laravel应用程序(mysql)中的数据库文本字段提供默认值[重复]
【发布时间】:2020-06-02 12:55:16
【问题描述】:

在我的 laravel 应用程序中,我有一个文本类型的帖子“正文”字段,我正在尝试为该字段提供一个默认值,例如“这是博客文章的默认文本,请随意更改它”但是 mysql正在抛出错误。

$table->text('body')->default('This is the default text for a blog post, feel free to change it.');

这行不通...

根据文档 BLOB/TEXT 字段不能有默认值,这很奇怪。

https://dev.mysql.com/doc/refman/5.7/en/blob.html

我想我可以将字段类型从文本更改为字符串,但 afaik 字符串的字符数不会与字符串类型一样多,而且我确信我的博客文章会很长。我该如何处理?

提前致谢。

【问题讨论】:

  • 为什么需要默认值?留下它NULL
  • 我为什么不给它一个?我需要它来拥有一个。

标签: php laravel


【解决方案1】:

您可以将其设置为可空$table->text('body')->nullable(true); 在您看来,如果它是NULL,就给它一个默认文本。

【讨论】:

    【解决方案2】:

    在 mysql 中你不能给 text 默认值。 解决方案:

    • 将其转换为varchar(一行最多可以有255个字符)
    • 用代码给出默认值(在创建期间,创建后,默认占位符文本...)

    【讨论】:

      【解决方案3】:

      您可以使用Accessors & Mutators
      这是一个为 body
      设置默认值的示例 它的作用是每次您的模型要保存在数据库中时,它都会检查值是否为空,然后设置您的默认值
      只需将以下代码放入您的模型中即可。

      public function setBodyAttribute($value = null)
          {
              if (null === $value) {
                  $this->attributes['body'] = 'default value';
              }
      
              $this->attributes['body'] = $value;
          }
      

      【讨论】:

        猜你喜欢
        • 2017-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-22
        • 2015-03-05
        • 1970-01-01
        • 2019-09-08
        相关资源
        最近更新 更多