Переименуйте имя столбца с дефисом (-) в миграции Laravel - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь запустить миграцию laravel, которая переименовывает определенный столбец в моей базе данных, но я постоянно получаю сообщение об ошибке.

class ModifyColumnName extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('posts', function (Blueprint $table) {
            $table->renameColumn("content-description", "content_description");
        });
    }

}

Я продолжаю получать это сообщение об ошибке.

Illuminate\Database\QueryException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; 
check the manual that corresponds to your MariaDB server version for the right syntax to use near '-description content_description VARCHAR(255) DEFAULT NULL' at line 1 (SQL: ALTER TABLE posts CHANGE content-description content_description VARCHAR(255) DEFAULT NULL)

Ответы [ 3 ]

0 голосов
/ 30 мая 2019

Дефисы в именах баз данных не годятся, и дефисы являются большой проблемой, потому что, если вы в конечном итоге сопоставите имя столбца с переменной, большинству языков не нравятся дефисы внутри имен переменных.

Но выможете использовать их с трюком с обратным тиканием, просто заключите имя столбца в обратный тик (`)

public function up()
{
    Schema::table('posts', function (Blueprint $table) {
        $table->renameColumn("`content-description`", "content_description");
    });
}
0 голосов
/ 30 мая 2019

, поскольку в столбце нет данных, попробуйте это ...

class ModifyColumnName extends Migration
{
 /**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::table('posts', function (Blueprint $table) {
        $table->dropColumn("`content-description`");
        $table->string("`content_description`");
    });
}
/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::table('posts', function (Blueprint $table) {
        $table->string("`content-description`");
        $table->dropColumn("`content_description"`);
    });
}

}

Согласно сообщению mariadb.com: " Идентификаторы могут заключаться в кавычки с использованием символа обратного хода -`. Заключение в кавычки необязательно для идентификаторов, которые не содержат специальных символов, или для идентификаторов, которые не являются зарезервированными словами, если флаг ANSI_QUOTES SQL_MODE установлен, двойные кавычки (") также могут использоваться для кавычек идентификаторов. "

именно поэтому я предпочитаю innoDB ... !! всегда использовать одинарные кавычки

0 голосов
/ 30 мая 2019

Поместите название столбца с дефисом в обратных кавычках

Schema::table('posts', function (Blueprint $table) {
    $table->renameColumn("`content-description`", "content_description");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...