Мне нужно изменить с типом столбца миграции $table->string('text');
на тип текста, я попытался сделать это несколькими способами, но никто из них не работал. Можно ли это сделать за одну миграцию. Я мог бы догадаться о том, чтобы удалить столбец, а затем создать его снова с помощью нового типа, но мне интересно, можно ли это сделать в одном переносе?
Миграции Laravel изменяют тип столбца от varchar до longText
Ответ 1
Вы можете создать новую миграцию и изменить только один тип столбца:
public function up()
{
Schema::table('sometable', function (Blueprint $table) {
$table->text('text')->change();
});
}
Вам нужно установить doctrine/dbal
чтобы сделать эту работу
composer require doctrine/dbal
Ответ 2
Согласно Laravel Doc
Вы можете сделать это, как
Schema::table('yourTable', function (Blueprint $table) {
$table->text('text')->change();
});
обязательно добавьте зависимость doctrine/dbal к вашему файлу composer.json
Ответ 3
Это возможно сделать с миграцией TABLE.
Как упоминалось в других сообщениях, обязательно запустите composer install doctrine/dbal
из корня проекта.
Они настроены с помощью:
php artisan make:migration alter_table_[yourtablenamehere]_change_[somecolumnname] --table=[yourtablenamehere]
из корня проекта.
Из документации:
https://laravel.com/docs/master/migrations#modifying-columns
class AlterTableSomething extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('table', function (Blueprint $table) {
$table->text('column_name')->change();
});
}
}
Ответ 4
Если вы получаете следующую ошибку, используя change()
Неизвестный запрос типа базы данных, Doctrine\DBAL\Platforms\MySQL80Platform может не поддерживать его.
это означает, что существует некоторая колонка (не обязательно измененная) в вашей таблице, которая имеет тип перечисления. Поэтому вместо использования функции change()
вы можете использовать следующую функцию:
public function changeColumnType($table, $column, $newColumnType) {
DB::statement("ALTER TABLE $table CHANGE $column $column $newColumnType");
}
И используйте его так: $this->changeColumnType('sometable','text','TEXT');