【问题标题】:Renaming column in Laravel migration, forcing lowercase在 Laravel 迁移中重命名列,强制小写
【发布时间】:2019-08-24 10:48:37
【问题描述】:

我正在尝试运行迁移以重命名我的一个表上的列。 每当我尝试重命名该列时,都会出现以下错误。

“表'Table-Name'上没有名称为'column_name_id'的列。”

但是,没有列“column_name_id”的原因是它应该像我写的那样区分“Column_Name_ID”的大小写。

我尝试使用strtoupper()。我还使用反引号来查看是否有帮助。没有喜悦。

我不确定这是否是我的数据库设置的问题,但我之前使用过 renameColumn 没有问题。

public function up()
    {
        Schema::table('`Table-Name`', function (Blueprint $table) {
            $table->renameColumn('Column_Name_ID', 'Column_Name');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('`Table-Name`', function (Blueprint $table) {
            $table->renameColumn('Column_Name', 'Column_Name_ID');
        });
    }

【问题讨论】:

  • 你的操作系统是什么?请检查此链接stackoverflow.com/questions/2009005/…,因为它表明 unix 对字段名称具有区分大小写的命名,但窗口并不关心这一点。这可能是您的问题吗?
  • 我知道 windows 不在乎,但它从来没有为我把它变成小写。本地是 windows,但我推送到 unix 服务器
  • 试试双引号 "Table-Name"
  • 不,那没用。
  • 在 config/database.php 添加这一行到 mysql 驱动器'options' => [PDO:: CASE_NATURAL =>true],

标签: php mysql laravel migration


【解决方案1】:

正如issue 中所说,名称使用双引号。

Schema::table('`Table-Name`', function (Blueprint $table) {
    $table->renameColumn('"Column_Name_ID"', '"Column_Name"');
});

【讨论】:

    【解决方案2】:

    因为我不会花太长时间试图解决这个问题,我最终做的是使用原始语句。

    public function up()
       {
           DB::statement('alter table `Table-Name` change column `Column_Name_ID` `Column_Name` integer(11) null');
       }
    
       /**
        * Reverse the migrations.
        *
        * @return void
        */
       ///
    

    【讨论】:

      猜你喜欢
      • 2018-12-10
      • 2020-06-22
      • 2018-08-20
      • 2015-07-28
      • 2016-10-11
      • 1970-01-01
      • 2018-07-18
      • 2017-02-01
      • 2014-12-18
      相关资源
      最近更新 更多