DEV Community

loading...
Cover image for Crie seu próprio sistema de migrations em PHP! Parte 2 — Final

Crie seu próprio sistema de migrations em PHP! Parte 2 — Final

tadeubarbosa profile image Tadeu Barbosa ・3 min read

Bem, no último post vimos a respeito das migrations e como fazemos para criar no Laravel. E, como eu disse, existem bibliotecas disponíveis para o uso das migrations e você pode utilizar em seus projetos. Mas se tem uma coisa que gosto é saber como as coisas funcionam, como eu faço a mesma coisa ou parecida, que aquele framework fez e não simplesmente adicionar trocentas linhas de código via composer e encher o meu diretório vendor.

Ok, vamos combinar que nem sempre a gente vai criar as coisas ao invés de usar bibliotecas. E eu as utilizo! Há projetos que desenvolvo e crio em Laravel, Vuejs etc. A questão aqui não é “reinventar a roda”, mas entender como as coisas funcionam! Combinado?! ;)

Mundo open source

Alt Text

Bem, há um motivo pelo qual me aventurei a criar tal sistema de migrations. O Zig Money. Um sistema em PHP criado por um cara firmeza, o Valdiney, que está sempre envolvido com o mundo open source. Como lemos no próprio repositório:

O ZigMoney é um projeto que visa ajudar pequenos
comércios e comerciantes que precisam registrar suas 
vendas diárias de forma simples e organizada.
Trata-se de um sistema web escrito em PHP e Mysql.
O intuito é disponibilizar uma plataforma 
com módulos que facilite e potencialize o controle
de informações de vendas totalmente online.

A proposta, além da descrita acima, é desenvolver um sistema sem utilizar muitas bibliotecas, assim crescemos junto com o projeto. Confira e envie uma contribuição, por mais que represente pouco para você, representará muito para nós e para quem usufrui da ferramenta! :D


A ideia foi criarmos as migrations via linha de comando, adaptando um sistema de linha de comando que já existia na ferramenta. O primeiro passo foi criar a parte da linha de comando, para que ao digitar o seguinte comando: php comando.php create migration lorem ipsum dolor, fosse gerado um arquivo.sql dentro de um diretório específico. Para isso você pode criar um arquivo comando.php na raiz do projeto com o seguinte conteúdo:

<?php
$parametros    = array_slice($argv, 1);
$comando       = "{$parametros[0]} {$parametros[1]}";
$migrationNome = array_slice($argv, 3);
$migrationNome = str_replace(" ", "_", $migrationNome);
$pathname      = "migrations/{$migrationNome}.sql";

if ($comando == "create migration") {
  file_put_contents("", $pathname);
  echo "Migration criada em: {$pathname}";
}

Claro, tentei simplificar aqui, mas você pode melhorar bastante esse sistema!

Após criar o arquivo, basta colocarmos dentro do arquivo sql gerado, o conteúdo que gostaríamos, suponhamos que digitei: `php comando.php create migration cria tabela de usuarios, o arquivo de cima irá gerar o arquivo migrations/cria_tabela_de_usuarios.sql. Dentro desse arquivo iremos colocar:

CREATE TABLE usuarios IF NOT EXISTS (
    id int NOT NULL AUTO_INCREMENT,
    nome varchar(60) NOT NULL,
    email varchar(60) NOT NULL,
    password varchar(60) NOT NULL,
    PRIMARY KEY (id)
);

Lembra do nosso comando.php? Vamos alterar algumas coisas:

<?php
$parametros    = array_slice($argv, 1);

if (count($parametros) > 2) {
  $comando       = "{$parametros[0]} {$parametros[1]}";
  $migrationNome = array_slice($argv, 3);
  $migrationNome = str_replace(" ", "_", $migrationNome);
  $pathname      = "migrations/{$migrationNome}.sql";
  //
  if ($comando == "create migration") {
    file_put_contents("", $pathname);
    echo "Migration criada em: {$pathname}";
  }
  exit;
}

if ($parametros[0] == "migrate") {
  $files = glob("migrations/*.sql", GLOB_BRACE);
  foreach ($files as $file) {
    $content = file_get_contents($file);
    // executa o comando sql da migration
    DB::execute($content);
  }
}

Pronto! Com algumas adaptações o seu comando.php estará pronto para criar e executar as suas migrations ;)


Espero que tenham gostado e que de alguma maneira isso possa adicionar algo a sua carreira. Não deixem de conferir o ZigMoney e deixarem uma contribuição. Até a próxima!


Imagem: Tammy Duggan-Herd por Pixabay

Discussion (0)

pic
Editor guide