在 Laravel 迁移中重命名列,强制小写

Posted

技术标签:

【中文标题】在 Laravel 迁移中重命名列,强制小写【英文标题】:Renaming column in Laravel migration, forcing lowercase 【发布时间】: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');
        );
    

【问题讨论】:

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

【讨论】:

以上是关于在 Laravel 迁移中重命名列,强制小写的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Visual Studio 数据库项目重命名列?

Laravel 5.0 - 在 1 个迁移中重命名多个列

在迁移中使用 postgreSQL 重命名列

仅通过更改大小写在 Swift 中重命名文件会出现错误:没有这样的文件或目录

重命名 mysql 表中的列,而不必重复其类型定义

重命名mysql表中的列而不必重复其类型定义