Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Здравствуйте
Почитал документацию, если с добавлением столбцов я всё понял, то с удалением не совсем. Получается, мало создать миграцию с Schema::table, надо еще устанавливать некую библиотеку, которая реализует удаление столбцов? Как грамотно на практике реализовывать такую задачу? Спасибо большое!!!
Не в сети
нет, такая библиотека не требуется.
Вот пример такой миграции
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class UserRoles extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('user', function (Blueprint $table) {
$table->json('roles')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('user', function (Blueprint $table) {
$table->dropColumn('roles');
});
}
}
Здесь Вы видите создание столбца roles и откат миграции, при котором удаляется этот столбец.
Разумеется Вы можете поменять действия в up/down местами, тогда миграция будет удалять столбец, а при откате создавать его.
Изменено nailfor (31.05.2020 22:44:22)
Не в сети
Вообще-то принято показывать конкретный код и сообщение об ошибке чтобы мы не гадали.
Может быть твоя колонка участвует в каких-то отношениях? Или у тебя в одном блоке удаляется колонка и создаётся новая с тем же именем?
Ещё частные случаи, которые не могут быть обработаны стандартными миграциями и приходится что-то добавлять в composer или вызывать DB::statement("ALTER TABLE...")
На вскидку помню сложности с enum.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
nailfor, artoodetoo
Извиняюсь, просто я еще и код не писал, а в документации читал, там написано про зависимость: doctrine/dbal
Поэтому я и спросил. Так она нужна или нет? Я уже попробовал и удалять и изменять, но она у меня стоит, и всё работает. Вот текст с документации:
Удаление столбцов
Для удаления столбца используйте метод dropColumn на построителе структур. Перед удалением столбцов из базы данных SQLite вам необходимо добавить зависимость doctrine/dbal в ваш файл composer.json и выполнить команду composer update для установки библиотеки:Schema::table('users', function (Blueprint $table) {
$table->dropColumn('votes');
});
Изменено JohnnyDoe (01.06.2020 10:12:40)
Не в сети
doctrine/dbal — раз написано в доке, значит нужна ) Другое дело что она возможно и без явного добавления уже в твоих зависимостях. Если заглянуть в composer.lock, можно обнаружить мноооого вторичных зависимостей.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
doctrine/dbal — раз написано в доке, значит нужна ) Другое дело что она возможно и без явного добавления уже в твоих зависимостях. Если заглянуть в composer.lock, можно обнаружить мноооого вторичных зависимостей.
Блэээн, как же я не догадался, хотя подозревал, что скорее всего так уже давно сделано) Спасибо за ответ!)
Не в сети
Страницы 1