O Laravel 5 agora suporta a alteração de uma coluna; Aqui está um exemplo da documentação oficial:
Schema::table('users', function($table)
{
$table->string('name', 50)->nullable()->change();
});
Fonte: http://laravel.com/docs/5.0/schema#changing-columns
O Laravel 4 não suporta a modificação de colunas; portanto, você precisará usar outra técnica, como escrever um comando SQL bruto. Por exemplo:
// getting Laravel App Instance
$app = app();
// getting laravel main version
$laravelVer = explode('.',$app::VERSION);
switch ($laravelVer[0]) {
// Laravel 4
case('4'):
DB::statement('ALTER TABLE `pro_categories_langs` MODIFY `name` VARCHAR(100) NULL;');
break;
// Laravel 5, or Laravel 6
default:
Schema::table('pro_categories_langs', function(Blueprint $t) {
$t->string('name', 100)->nullable()->change();
});
}
->nullable(false)
permitirá que você altere a coluna novamente.Aqui está a resposta completa para o futuro leitor. Observe que isso só é possível no Laravel 5+.
Primeiro de tudo, você precisará do pacote doutrina / dbal :
Agora, na sua migração, você pode fazer isso para tornar a coluna anulável:
Você pode estar se perguntando como reverter esta operação. Infelizmente, esta sintaxe não é suportada:
Esta é a sintaxe correta para reverter a migração:
Ou, se preferir, você pode escrever uma consulta bruta:
Espero que você encontre esta resposta útil. :)
fonte
nullable(false)
me salvou de arrancar os cabelos, porquenullable()
não está bem documentado e não hánotNull()
função.SET FOREIGN_KEY_CHECKS = 0
dá um erro. você provavelmente precisará alterar as restrições da tabela usando uma consulta bruta. veja aqui: postgresql.org/docs/current/static/sql-altertable.htmlSuponho que você esteja tentando editar uma coluna na qual já adicionou dados, portanto, não é possível soltar a coluna e adicioná-la novamente como uma coluna anulável sem perder dados. Nós vamos
alter
a coluna existente.No entanto, o construtor de esquemas do Laravel não suporta a modificação de colunas além de renomear a coluna. Portanto, você precisará executar consultas brutas para fazê-las, assim:
E para garantir que você ainda possa reverter sua migração, faremos o
down()
mesmo.Uma observação é que, como você está convertendo entre anulável e não anulável, será necessário limpar os dados antes / após a migração. Faça isso no seu script de migração nos dois sentidos:
fonte
query
porstatement
down
função no segundo bloco de código, a instrução SQL deve terminar comNOT NULL
. (Adown
função do terceiro exemplo é correcta.)Ele é a migração completa para o Laravel 5 :
O ponto é que você pode remover
nullable
passandofalse
como argumento.fonte
Se acontecer de você mudar as colunas e tropeçar
então apenas instale
composer require doctrine/dbal
fonte
Adicionando à resposta de Dmitri Chebotarev, como para o Laravel 5+.
Depois de exigir o pacote doutrina / dbal :
Você pode fazer uma migração com colunas anuláveis, da seguinte maneira:
Para reverter a operação, faça:
fonte
Adicionando à resposta de Dmitri Chebotarev,
Se você quiser alterar várias colunas ao mesmo tempo, faça o seguinte
fonte
Tente:
fonte
->change
no final e mencioná-lo apenas no Laravel 5+ #composer require doctrine/dbal
Para o Laravel 4.2, a resposta de Unnawut acima é a melhor. Mas se você estiver usando o prefixo da tabela, precisará alterar um pouco o seu código.
E para garantir que você ainda possa reverter sua migração, faremos o
down()
mesmo.fonte