The Blog

Laravel: Criando o arquivo de Migration – Reiniciando


Aqui eu detalho a lista de tabelas e suas funções no sistema, que serão utilizadas no nosso projeto. O SQL desse projeto encontra-se no arquivo ‘banco_de_dados.sql’ que está na raiz do projeto, porém não será necessário utilizá-lo, pois vamos aprender a usar o recurso de migração do Laravel através de comandos Artisan.

Tabelas de cadastros:

  • account_plans (registros de planos de contas)
    • id (primary key, auto_increment)
    • parameters_id (vínculo com a tabela de perfis)
    • classification (Ex: 1.22.19.2)
    • title (Ex: Receitas, Despesas, Matéria-Prima, Uso e Consumo)
    • plangroup (id do registro pai)
    • username (usuário que modificou o registro)
    • status (ativo, inativo)
    • recipeexpense (‘R’ ou ‘E’)
  • banks (registros de bancos)
    • id (primary key, auto_increment)
    • parameters_id (vínculo com a tabela de perfis)
    • title (nome do banco)
    • bank (nome do banco: Bradesco, Caixa, Banco do Brasil, Itaú)
    • agency (número da agência)
    • account (número da conta)
    • account_type (tipo da conta: corrente, poupança, aplicação, salário)
    • bank_number (código do banco: 237, 104, 001, 341)
    • check_emitter (emite cheques?)
    • username (usuário que modificou o registro)
    • status (ativo, inativo)
  • boxes (registro de caixas/carteiras)
    • id (primary key, auto_increment)
    • parameters_id (vínculo com a tabela de perfis)
    • title (nome do caixa/carteira)
    • username (usuário que modificou o registro)
    • status (ativo, inativo)
  • cards (registro de cartões de crédito)
    • id (primary key, auto_increment)
    • parameters_id (vínculo com a tabela de perfis)
    • bill_day (dia de vencimento da fatura)
    • title (nome do cartão)
    • brand (Ex: Mastercard, Visa, Hiper, Dinners Club, etc)
    • best_after (melhor dia de compra)
    • limit
    • username (usuário que modificou o registro)
    • status (ativo, inativo)
  • costs (registro de centros de custos/categorias)
    • id (primary key, auto_increment)
    • parameters_id (vínculo com a tabela de perfis)
    • title (nome do centro de custos/categoria. Ex: Reforma da casa, transportes, alimentação, etc)
    • username (usuário que modificou o registro)
    • status (ativo, inativo)
  • customers (registros de clientes)
    • id (primary key, auto_increment)
    • parameters_id (vínculo com a tabela de perfis)
    • type (F: pessoa física, J: pessoa jurídica)
    • title (nome do cliente)
    • razao_social
    • cpfcnpj
    • ie (número da inscrição estadual)
    • im (número da inscrição municipal)
    • bank (dados bancários: banco)
    • agency (dados bancários: agência)
    • account (dados bancários: conta)
    • address
    • neighborhood
    • cep
    • city
    • state
    • phone1
    • phone2
    • phone3
    • phone4
    • email
    • obs
    • username (usuário que modificou o registro)
    • status (ativo, inativo)
  • document_types (registros de tipos de documentos)
    • id (primary key, auto_increment)
    • parameters_id (vínculo com a tabela de perfis)
    • title (nome do tipo de documentos. Ex: : dinheiro, cheque, cartão, promissória, recibo, etc)
    • vinculapgto (permite vincular pagamentos? Ex: faturas, duplicatas, boletos)
    • duplicadoc (permite duplicar o document_number do movimento)
    • username (usuário que modificou o registro)
    • status (ativo, inativo)
  • event_types (registro de tipos de eventos)
    • id (primary key, auto_increment)
    • parameters_id (vínculo com a tabela de perfis)
    • title (nome do tipo de eventos. Ex: débito em conta, crédito em conta, depósito, transferência, estorno, etc)
    • username (usuário que modificou o registro)
    • status (ativo, inativo)
  • providers (registros de fornecedores)
    • id (primary key, auto_increment)
    • parameters_id (vínculo com a tabela de perfis)
    • type (F: pessoa física, J: pessoa jurídica)
    • title (nome do fornecedor)
    • razao_social
    • cpfcnpj
    • ie (número da inscrição estadual)
    • im (número da inscrição municipal)
    • bank (dados bancários: banco)
    • agency (dados bancários: agência)
    • account (dados bancários: conta)
    • address
    • neighborhood
    • cep
    • city
    • state
    • phone1
    • phone2
    • phone3
    • phone4
    • email
    • obs
    • username (usuário que modificou o registro)
    • status (ativo, inativo)

Tabelas de movimentos:

  • movements (registro de movimentos financeiros de contas a pagar/pagas e/ou contas a receber/recebidas)
    • id (primary key, auto_increment)
    • parameters_id (vínculo com a tabela de perfis)
    • banks_id (vínculo com a tabela de bancos)
    • boxes_id (vínculo com a tabela de caixas/carteiras)
    • cards_id (vínculo com a tabela de cartões)
    • plannings_id (vínculo com a tabela de planejamentos e metas)
    • costs_id (vínculo com a tabela de centros de custos/categorias)
    • event_types_id (vínculo com a tabela de tipos de eventos)
    • providers_id (vínculo com a tabela de fornecedores)
    • customers_id (vínculo com a tabela de clientes)
    • document_types_id (vínculo com a tabela de tipos de documentos)
    • account_plans_id (vínculo com a tabela de planos de contas)
    • order_number (número de ordem interna)
    • document_number (número de documento interno)
    • recipeexpense (‘R’ ou ‘E’)
    • date (data do registro)
    • bill_date (data de vencimento do registro)
    • value (valor do registro)
    • date_consolidation (data da baixa do registro)
    • value_consolidation (valor da baixa do registro)
    • title (nome do registro)
    • contabil (‘S’ ou ‘N’. Controla se o pagamento irá movimentar o saldo do banco/caixa/carteira na baixa)
    • user_consolidation (usuário que fez a baixa do registro)
    • obs (observações do registro)
    • username (usuário que modificou o registro)
    • status (A: aberto, B: baixado, C: cancelado, G: agrupado, V: vinculado, O: baixa parcial, P: parcial)
  • movement_banks (registro de movimentos financeiros de banco)
    • id (primary key, auto_increment)
    • parameters_id (vínculo com a tabela de perfis)
    • banks_id (vínculo com a tabela de bancos)
    • costs_id (vínculo com a tabela de centros de custos/categorias)
    • document_types_id (vínculo com a tabela de tipos de documentos)
    • event_types_id (vínculo com a tabela de tipos de eventos)
    • moviment_checks_id (vínculo com a tabela de movimentos de cheques)
    • transfers_id (vínculo com a tabela de transferências)
    • movements_id (vínculo com a tabela de movimentos)
    • providers_id (vínculo com a tabela de fornecedores)
    • customers_id (vínculo com a tabela de clientes)
    • account_plans_id (vínculo com a tabela de planos de contas)
    • order_number (número de ordem interna)
    • document_number (número de documento interno)
    • recipeexpense (‘R’ ou ‘E’)
    • date (data do registro)
    • bill_date (data de vencimento do registro)
    • value (valor do registro)
    • date_consolidation (data da baixa do registro)
    • value_consolidation (valor da baixa do registro)
    • title (nome do registro)
    • contabil (‘S’ ou ‘N’. Controla se o pagamento irá movimentar o saldo do banco)
    • obs (observações do registro)
    • username (usuário que modificou o registro)
    • status (A: aberto, B: baixado, C: cancelado)
  • movement_boxes (registro de movimentos financeiros de caixa/carteira)
    • id (primary key, auto_increment)
    • parameters_id (vínculo com a tabela de perfis)
    • boxes_id (vínculo com a tabela de caixas/carteiras)
    • costs_id (vínculo com a tabela de centros de custos/categorias)
    • document_types_id (vínculo com a tabela de tipos de documentos)
    • event_types_id (vínculo com a tabela de tipos de eventos)
    • movement_checks_id (vínculo com a tabela de movimentos de cheques)
    • transfers_id (vínculo com a tabela de transferências)
    • movements_id (vínculo com a tabela de movimentos)
    • account_plans_id (vínculo com a tabela de planos de contas)
    • customers_id (vínculo com a tabela de clientes)
    • providers_id (vínculo com a tabela de fornecedores)
    • order_number (número de ordem interna)
    • document_number (número de documento interno)
    • recipeexpense (‘R’ ou ‘E’)
    • date (data do registro)
    • bill_date (data de vencimento do registro)
    • value (valor do registro)
    • date_consolidation (data da baixa do registro)
    • value_consolidation (valor da baixa do registro)
    • title (nome do registro)
    • contabil (‘S’ ou ‘N’. Controla se o pagamento irá movimentar o saldo do banco)
    • obs (observações do registro)
    • username (usuário que modificou o registro)
    • status (A: aberto, B: baixado, C: cancelado, O: baixa parcial, P: parcial)
  • movement_cards (registro de movimento financeiro de cartão)
    • id (primary key, auto_increment)
    • parameters_id (vínculo com a tabela de perfis)
    • cards_id (vínculo com a tabela de cartões)
    • movements_id (vínculo com a tabela de movimentos)
    • banks_id (vínculo com a tabela de bancos)
    • boxes_id (vínculo com a tabela de caixas/carteiras)
    • document_types_id (vínculo com a tabela de tipos de documentos)
    • event_types_id (vínculo com a tabela de tipos de eventos)
    • account_plans_id (vínculo com a tabela de planos de contas)
    • costs_id (vínculo com a tabela de centros de custos/categorias)
    • customers_id (vínculo com a tabela de clientes)
    • providers_id (vínculo com a tabela de fornecedores)
    • order_number (número de ordem interna)
    • document_number (número de documento interno)
    • bill_date (data de vencimento do registro)
    • title (nome do registro)
    • recipeexpense (‘R’ ou ‘E’)
    • date (data do registro)
    • value (valor do registro)
    • date_consolidation (data da baixa do registro)
    • value_consolidation (valor da baixa do registro)
    • contabil (‘S’ ou ‘N’. Controla se o pagamento irá movimentar o saldo do banco)
    • obs (observações do registro)
    • username (usuário que modificou o registro)
    • status (A: aberto, B: baixado, C: cancelado)
  • movement_checks (registro de movimento financeiro de cheque)
    • id (primary key, auto_increment)
    • parameters_id (vínculo com a tabela de perfis)
    • banks_id (vínculo com a tabela de bancos)
    • boxes_id (vínculo com a tabela de caixas/carteiras)
    • costs_id (vínculo com a tabela de centros de custos/categorias)
    • event_types_id (vínculo com a tabela de tipos de eventos)
    • providers_id (vínculo com a tabela de fornecedores)
    • account_plans_id (vínculo com a tabela de planos de contas)
    • movements_id (vínculo com a tabela de movimentos)
    • transfers_id (vínculo com a tabela de transferências)
    • order_number (número de ordem interna)
    • document_number (número de documento interno)
    • box_provider (C: caixa, F: fornecedor)
    • check_number (número do cheque)
    • check_name (nome no qual o cheque foi emitido)
    • check_date (data de emissão do cheque)
    • date (data do registro)
    • value (valor do registro)
    • title (nome do registro)
    • contabil (‘S’ ou ‘N’. Controla se o pagamento irá movimentar o saldo do banco)
    • obs (observações do registro)
    • username (usuário que modificou o registro)
    • status (A: aberto, B: baixado, C: cancelado, O: baixa parcial, P: parcial)
  • plannings (registros de planejamentos e metas)
    • id (primary key, auto_increment)
    • parameters_id (vínculo com a tabela de perfis)
    • account_plans_id (vínculo com a tabela de planos de contas)
    • costs_id (vínculo com a tabela de centros de custos/categorias)
    • order_number (número de ordem interna)
    • document_number (número de documento interno)
    • recipeexpense (‘R’ ou ‘E’)
    • customers_id (vínculo com a tabela de clientes)
    • providers_id (vínculo com a tabela de fornecedores)
    • date (data do registro)
    • bill_date (data de vencimento do registro)
    • title (nome do registro)
    • value (valor do registro)
    • parcels (número de parcelas que serão geradas nos movimentos de contas a pagar/receber)
    • obs (observações do registro)
    • username (usuário que modificou o registro)
    • status (A: aberto, B: finalizado, C: cancelado)
  • transfers (registros de transferências entre bancos e/ou caixas)
    • id (primary key, auto_increment)
    • parameters_id (vínculo com a tabela de perfis)
    • banks_id (vínculo com a tabela de bancos)
    • boxes_id (vínculo com a tabela de caixas/carteiras)
    • costs_id (vínculo com a tabela de centros de custos/categorias)
    • account_plans_id (vínculo com a tabela de planos de contas)
    • document_types_id (vínculo com a tabela de tipos de documentos)
    • event_types_id (vínculo com a tabela de tipos de eventos)
    • banks_dest (vínculo com a tabela de bancos de destino)
    • boxes_dest (vínculo com a tabela de caixas/carteiras de destino)
    • costs_dest (vínculo com a tabela de centros de custos/categorias de destino)
    • account_plans_dest (vínculo com a tabela de planos de contas de destino)
    • order_number (número de ordem interna)
    • document_number (número de documento interno)
    • radio_source (banco, caixa/carteira)
    • radio_destination (banco, caixa/carteira)
    • date_consolidation (data da baixa do registro)
    • value_consolidation (valor da baixa do registro)
    • title (nome do registro)
    • check_numberr (número do cheque)
    • check_name (nome no qual o cheque foi emitido)
    • check_date (data de emissão do cheque)
    • contabil (‘S’ ou ‘N’. Controla se o pagamento irá movimentar o saldo do banco)
    • obs (observações do registro)
    • username (usuário que modificou o registro)
    • status (A: aberto, B: baixado, C: cancelado)

Tabelas de relacionamentos:

  • movements_movement_cards (vínculo dos movimentos de contas a pagar/receber com a tabela de movimentos de cartões)
    • id (primary key, auto_increment)
    • parameters_id (vínculo com a tabela de perfis)
    • cards_id (vínculo com a tabela de cartões)
    • movements_id (vínculo com a tabela de movimentos)
    • bill_date (data de vencimento do lançamento)
  • movement_mergeds (vínculo de movimentos entre si)
    • id (primary key, auto_increment)
    • parameters_id (vínculo com a tabela de perfis)
    • movements_id (vínculo com a tabela de movimentos: registro pai)
    • movements_mergeds (vínculo com a tabela de movimentos: registros filhos)
  • movement_recurrents (registro de movimentos que serão criados automaticamente no CRON do sistema)
    • id (primary key, auto_increment)
    • parameters_id (vínculo com a tabela de perfis)
    • movements_id (vínculo com a tabela de movimentos)
    • movement_cards_id (vínculo com a tabela de movimentos de cartões)
  • users_parameters (vínculo da tabela de usuários e a tabela de perfis)
    • id (primary key, auto_increment)
    • parameters_id (vínculo com a tabela de perfis)
    • mailler (receber os alertas diários e semanais de vencimentos de contas)
    • users_id (vínculo com a tabela de usuários)
    • roles_id (vínculo com a tabela de regras de acesso)

Tabelas de sistema:

  • balances (registro de saldos de bancos, caixas, cartões e planejamentos)
    • id (primary key, auto_increment)
    • parameters_id (vínculo com a tabela de perfis)
    • banks_id (vínculo com a tabela de bancos)
    • boxes_id (vínculo com a tabela de caixas/carteiras)
    • cards_id (vínculo com a tabela de cartões)
    • plannings_id (vínculo com a tabela de planejamentos e metas)
    • date (data do registro)
    • value (valor do saldo)
  • regs (registro de atividades de exclusão e edição)
    • id (primary key, auto_increment)
    • parameters_id (vínculo com a tabela de perfis)
    • users_id (vínculo com a tabela de usuários)
    • log_type (login, noLogin)
    • function (Ex: banks, boxes, cards, movements, etc)
    • content (conteúdo do log)
    • username (usuário que modificou o registro)
  • roles (registro de regras de acesso do sistema)
    • id (primary key, auto_increment)
    • title (dev, admin, user, accounter)
  • knowledge (base de conhecimento com dicas de uso para exibição aleatóreas)
    • id (primary key, auto_increment)
    • title (descrição da dica)
  • parameters (registro de perfis)
    • id (primary key, auto_increment)
    • title (nome do perfil)
    • razao_social
    • ie (número da inscrição estadual)
    • im (número da inscrição municipal)
    • cpfcnpj
    • type (F: pessoa física, J: pessoa jurídica)
    • email
    • address
    • neighborhood
    • city
    • state
    • cep
    • phone1
    • phone2
    • logo (logomarca da empresa)
    • bill_date (data de vencimento do acesso)
    • plans_id (vínculo com a tabela de planos de acesso)
  • plans (planos de uso do sistema)
    • id (primary key, auto_increment)
    • title (nome do registro)
    • value (valores dos planos)
  • users (registro de usuários)
    • id (primary key, auto_increment)
    • name (nome do usuário)
    • username (login de acesso: email)
    • password
    • language (língua que utiliza o sistema)
    • last_parameter (último perfil acessado)

Migrations

Vamos criar todas as tabelas com os comandos abaixo:

php artisan make:migration knowledge --create=knowledge
php artisan make:migration plans --create=plans
php artisan make:migration roles --create=roles
php artisan make:migration parameters --create=parameters
php artisan make:migration users_parameters --create=users_parameters

php artisan make:migration account_plans --create=account_plans
php artisan make:migration costs --create=costs
php artisan make:migration document_types --create=document_types
php artisan make:migration event_types --create=event_types
php artisan make:migration banks --create=banks
php artisan make:migration boxes --create=boxes
php artisan make:migration cards --create=cards
php artisan make:migration customers --create=customers
php artisan make:migration providers --create=providers
php artisan make:migration plannings --create=plannings

php artisan make:migration transfers --create=transfers
php artisan make:migration movements --create=movements
php artisan make:migration movement_banks --create=movement_banks
php artisan make:migration movement_boxes --create=movement_boxes
php artisan make:migration movement_cards --create=movement_cards
php artisan make:migration movement_checks --create=movement_checks

php artisan make:migration balances --create=balances
php artisan make:migration movements_movement_cards --create=movements_movement_cards
php artisan make:migration movement_mergeds --create=movement_mergeds
php artisan make:migration movement_recurrents --create=movement_recurrents

php artisan make:migration regs --create=regs

Como parâmetro do comando de criação do migration, pode-se utilizar o ‘–create’ para criar novas tabelas no banco e o ‘–table’ para editar tabelas já existentes.

Agora nós precisamos editar cada arquivo dentro da pasta ‘database/migrations’ com os campos de cada tabela. Siga o exemplo em https://github.com/Maksoud/reiniciando/blob/master/database/migrations/2020_07_18_045358_parameters.php

A tabela Plans e Roles deverão existir mesmo se não houver outra tabela relacionada, por isso, não adicione o ‘->onDelete(‘cascade’);’, conforme os arquivos em https://github.com/Maksoud/reiniciando/tree/master/database/migrations.

A lista de tipos aceitos no Laravel encontram-se em https://laravel.com/docs/7.x/migrations#creating-columns.

Após a criação dos campos nos arquivos gerados em ‘database/migrations/’, Execute todas as operações de criação dos campos e tabelas no banco de dados:

php artisan migrate

Em caso de falhas, você pode executar o seguinte comando para desfazer as alterações e corrigir as falhas:

php artisan migrate:rollback

Ou você pode redefinir todo o projeto e remover os dados das tabelas, digitando o comando a seguir:

php artisan migrate:fresh

Esse projeto possui todo o código disponível em https://github.com/Maksoud/reiniciando e o projeto está hospedado em https://reiniciando.maksoud.dev/. Deixe seu comentário abaixo e colabore com esse projeto.

Leave a comment