Laravel 5.4 Migração de Tabela Específica

89

Olá, leia toda a documentação incluída aqui em https://laravel.com/docs/5.4/migrations .

Existe uma maneira de migrar um determinado arquivo de migração (apenas 1 migração), porque agora toda vez que há uma alteração eu uso php artisan migrate:refreshe todos os campos estão sendo redefinidos.

Martney Acha
fonte

Respostas:

136

Primeiro você deve criar um migrationarquivo para sua tabela como:

public function up()
    {
        Schema::create('test', function (Blueprint $table) {
            $table->increments('id');
            $table->string('fname',255);
            $table->string('lname',255);
            $table->rememberToken();
            $table->timestamps();
        });
    }

Depois de criar teste pasta em migrações pasta então recém-criado migração movido / copiado no teste pasta e execute o comando abaixo em sua / cmd terminais como:

php artisan migrate --path=/database/migrations/test/
AddWeb Solution Pvt Ltd
fonte
1
Obrigado. Isso é exatamente o que eu estava procurando.
sadiq
4
php artisan migrate --path = banco de dados / migrações / teste / trabalhou para mim
Joyal,
Se não estiver funcionando, você tem uma resposta melhor em stackoverflow.com/questions/19102197/…
Hari Harker
86

você deve adicionar o caminho para o seu arquivo de migração para atualizar apenas esta tabela e executar

php artisan migrate:refresh --path=/database/migrations/fileName.php
Wissem SASSI
fonte
1
Bom trabalho cara. Nada funcionou, mas sua solução funcionou. Muito obrigado.
Vipertecpro
Exatamente eu estava procurando :) Obrigado amigo
VishalParkash
algumas vezes será database / migrations / fileName.php sem a primeira barra invertida
Ahmed Aboud
Vale a pena mencionar que, com uma atualização, todos os seus dados se foram. Você deve salvar os dados em seu banco de dados como uma exportação e importá-los após a atualização se desejar manter seus dados.
Taranis
@Taranis Apenas os dados da tabela que você não está atualizando todos
Wissem SASSI
54

Basta olhar para a migrationstabela em seu banco de dados, haverá uma lista de nome do arquivo de migração e valor do número do lote.

Suponha que você tenha a seguinte estrutura,

id     migration                                           batch

1      2014_10_12_000000_create_users_table                  1 
2      2014_10_12_100000_create_password_resets_table        1
3      2016_09_07_103432_create_tabel_roles                  1

Se você quiser apenas reverter a 2016_09_07_103432_create_tabel_rolesmigração, altere o valor do lote de migração para 2, que é o maior entre todos, e execute o seguinte.

php artisan migrate:rollback

Aqui, apenas a tabela com valor de lote 2 será revertida. Agora, faça alterações nessa tabela e execute o seguinte comando do console.

php artisan migrate

O valor do lote na migrationstabela define a ordem das migrações. quando você reverte, as migrações que são mais recentes ou têm o valor de lote mais alto são revertidas primeiro e depois em outras. Portanto, você pode alterar o valor no banco de dados e, em seguida, reverter um arquivo de migração específico.

Embora não seja uma boa ideia alterar o número do lote todas as vezes devido ao relacionamento entre a estrutura da tabela, podemos usar este caso para alguns casos em que o rollback de uma única tabela não viola a integridade entre as tabelas.

Espero que você entenda.

Sagar Gautam
fonte
@MartneyAcha Fico feliz que você tenha uma solução para o seu problema. Saúde !!
Sagar Gautam
Bela explicação. Se você tem um relacionamento de chave estrangeira na sua mesa, isso não funcionará
Ogbonna Vitalis
@OgbonnaVitalis Obrigado, será o caminho mais fácil para mesas independentes. A resposta aceita fornece uma maneira exata de reverter e migrar uma única tabela. para várias tabelas independentes ele funcionará.
Sagar Gautam
15

se você usar a guia para preenchimento automático

php artisan migrate --path='./database/migrations/2019_12_31_115457_create_coworking_personal_memberships_table.php'
Dawam Raja
fonte
9

Você pode executar um comando como este

php artisan migrate --path=/database/migrations/2020_04_10_130703_create_test_table.php
deathcript
fonte
8

Você precisa colocar o (s) arquivo (s) em um novo diretório (ex: selecionado) e depois aplicar

php artisan migrate  --path=/database/migrations/selected

se você precisar de rollback:

php artisan migrate:rollback  --path=/database/migrations/selected

Nota:

php artisan migrate:refresh

isso irá reverter e, em seguida, migrar todos os arquivos de migração no diretório padrão (/ database / migrations)

Ahmad Zahabi
fonte
Não há necessidade de criar um novo diretório, você pode colocar diretamente o nome do arquivo como '--path = / database / migrations / fileName.php'.
Wissem SASSI
7
php artisan help migrate

Você verá a opção:

--path [= PATH] O caminho para os arquivos de migração a serem executados

A propósito, você provavelmente pode indicar a pasta raiz do arquivo que deseja migrar:

php artisan migrate --path=/database/migrations/sample.php

Ou você pode criar uma nova pasta nas migrações e, em seguida, migrar todos os arquivos de migração que quiser dentro dela:

php artisan migrate --path=/database/migrations/new_folder
manh quan nguyen
fonte
você acabou de perder um 's'. Deve ser 'migrações'! php artisan migrate --path = / database / migrations / new_folder
Pasindu Jayanath
php artisan migrate --path = / database / migrations / new_folder / precisa do último '/'
Pasindu Jayanath
5

Só queria postar outra solução, que acho que vale a pena mencionar.

  1. Encontre a linha com seu nome de migração na tabela de migrações e DELETE-a. Deve ser assim: 2016_06_01_000001_create_oauth_auth_codes_table
  2. Remova sua tabela do banco de dados, por exemplo, DROP TABLE oauth_auth_codes
  3. Execute o php artisan migrate

Ele migrará apenas a mesa de que você precisa e não afetará mais nada

tylik
fonte
4

Se você deseja criar uma mesa específica. Você pode usar este código. Ele funciona para versões laravel (5.x).

php artisan migrate:refresh --path=/database/migrations/fileName.php
Kayhanozturk
fonte
3

Exclua a tabela e remova seu registro da tabela de migração.

Depois disso, basta executar a migração novamente:

php artisan migrate
sskoko
fonte
3

Correção - remova a barra antes do banco de dados

$ php artisan migrate --path=database/migrations/migration.php
TCruz
fonte
1
Nada para migrar.
zod de
3

Migração de Tabela Específica

php artisan migrate --path=/database/migrations/fileName.php
Vishal Vaghasiya
fonte
2

Ou você pode simplesmente deletar o nome do arquivo de migração de seu banco de dados, na tabela "migrações" e então executar: php artitsan migration

Lasha Shonia
fonte
1

Você pode tentar usar a opção --path = para definir a subpasta específica que deseja executar e colocar migrações específicas lá.

Alternativamente, você precisaria remover referências e tabelas do banco de dados e tabelas de migração que não são ideais: /

Chris WB
fonte
1

Se você deseja criar outra tabela, basta criar um novo arquivo de migração. Vai funcionar.

Se você criar uma migração users_tablecom o nome id, first_name, last_name. Você pode criar um arquivo de migração como

    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('first_name',255);
            $table->string('last_name',255);
            $table->rememberToken();
            $table->timestamps();
        });
    }
    public function down()
    {
        Schema::dropIfExists('users');
    }

Se você quiser adicionar outro campo como "status" sem migrar: atualize. Você pode criar outro arquivo de migração como "add_status_filed_to_users_table"

public function up()
{
    Schema::table('users', function($table) {
        $table->integer('status');
    });
} 

E não se esqueça de adicionar a opção de reversão:

public function down()
{
    Schema::table('users', function($table) {
        $table->dropColumn('status');
    });
}

E quando você executa o migrate com php artitsan migration, basta migrar o novo arquivo de migração.

Mas se você adicionar "status" arquivado no primeiro arquivo de migração (users_table) e executar a migração. Não é nada para migrar. Você precisa correr php artisan migrate:refresh.

Espero esta ajuda.

Nguyen Hoang
fonte
1

php artisan migrate --path = / database / migrations / fileName.php

Basta seguir a instrução para executar este nome de arquivo de comunicação aqui deve ser o nome da sua tabela de migração Exemplo: php artisan migrate --path = / database / migrations / 2020_02_21_101937_create_jobs_table.php

Mithun Rana
fonte
1

Você só pode executar este comando em seu terminal

php artisan migrate --path=database/migrations/2020_10_01_164611_create_asset_info_table.php

Após as migrações, você deve colocar o nome do arquivo específico. ou se você tiver alguma pasta dentro da migração, basta adicionar o nome dessa pasta após a migração.

Como isso

php artisan migrate --path=database/migrations/yourfolder/2020_10_01_164611_create_asset_info_table.php

Espero que isso ajude você um pouco. Happy Coding.

Sayandeep Majumdar
fonte
-1

Primeiro você deve fazer os seguintes comandos:

Passo 1:

php artisan migrate:rollback

Passo 2:

php artisan migrate

Sua tabela estará de volta no banco de dados.

Habibur Rahman
fonte
Seria mais útil se você colocasse uma pequena descrição para cada etapa. Isso ajudará a entender o usuário o que realmente está acontecendo. Isso parece um código de trapaça que magicamente faz as coisas funcionarem, mas o resultado pode ser desastroso em alguns casos.
Ashwani Agarwal
Por favor, leia a pergunta com atenção, a pessoa pediu apenas uma tabela, seu método irá reverter todas as migrações e então criar todas as tabelas. Também php artisan migration:refreshserve o mesmo.
Wajahat Hashmi