Auditoria, Log e Relacionamento
Criar relacionamento entre tabela com migration
- Criar uma tabela aulas e relacionar com a tabela cursos
php artisan make:migration create_aulas_table
- Executar a migration
php artisan migrate- Criar seeder
php artisan make:seeder NomeDoSeederphp artisan make:seeder AulaSeeder- Incluir novo seeder no arquivo database/seeders/DatabaseSeeder.php

- Criar Model e incluir as informações de nome da tabela e colunas
php artisan make:model NomeDaModelphp artisan make:model Aula
-
Obs: Conforme início do projeto, model Aula extends BaseTimestamp (é filha da classe BaseTimestamp, com as colunas criado e modificado)
-
Se isso não for ajustado, na hora de executar o php artisan db:seed irá apresentar erro, pois tentará cadastrar utilizando as colunas originais de timestamp (colunas created_at e modified_at)

- Ajustar a lógica no arquivo database/seeders/AulaSeeder.php para cadastrar seeders

- Executar as seeds
php artisan db:seedCriar relacionamento um para muitos e recuperar dados de duas tabelas
php artisan make:controller AulaController- Criar método index para listar as aulas

- Criar rota para acessar as aulas

-
Criar link na view listar cursos (index) para acessar as aulas do curso.
-
Adicionar o id do curso na rota, e passar o id dentro da view listar cursos

- Como temos o id na url listar-aulas/id_curso, conseguimos acessar os dados através da controller AulaController

- Filtrar o id do curso no select dentro do método index da controller AulaController.php para retornar apenas as aulas do curso acessado

-
Para exibir dados de uma tabela na outra (inner join), necessário definir o relacionamento nas models (Curso e Aula)
-
Relacionamento -> 1 curso pode possuir várias aulas -> One To Many
-
Implementar na model Curso - Tabela pai: cursos

- Implementar na model Aula - Tabela filha: aulas

- Recuperar os dados no relacionamento


- Carregar a view na controller AulaController.php

- Criar a view para carregar as informações do relacionamento - pasta resources/views/aulas/index.blade.php





- Acrescentar nova coluna ordem das aulas (para melhor exibição)
php artisan make:migration alter_aulas_add_ordem_aula_table
-
Executar a migration. No caso do sqlite, é necessário passar um valor como default, se não apresentará o erro abaixo
-
Obs: Relembrando, o banco de dados sqlite não aceita a cláusula/método after. Necessário ajustar manualmente em um sistema de gerenciamento de bancos - ex: DB Browser SQLITE

php artisan migrate- Incluir a coluna ordem_aula na seeder AulaSeeder.php

- Banco dropado para cadastrar os seeders com a coluna ordem_aula
php artisan migratephp artisan db:seed- Ordenar na controller AulaController.php pela coluna ordem_aula

- Criar link para listar aulas na view visualizar-curso (show)

- Como existe o relacionamento entre as tabelas, se tentarmos excluir algo da tabela pai (cursos) que possui aulas, não será possível excluir.
Criar formulário cadastrar como relacionamento entre as tabelas
-
Cadastrar uma nova aula para determinado curso
-
Criar a rota para cadastrar nova aula
![]()
-
Como a rota para cadastrar aula recebe o id do curso, precisamos passar para a view.
-
Portanto, na controller AulaController.php, passar para a view aulas/index os dados do curso através do método index (página index é a página que tem o botão para cadastrar aula, botão este que receberá como parâmetro o id do curso)

-
Criar a view aulas/create.blade.php
-
Com isso, podemos acessar o id do curso na view, ao clicar no botão cadastrar, e acessar a página cadastrar aula (aulas/create)

- Dentro da view create, passar o id do curso em um input (no final, ficará como hidden. No momento, exibir para teste), necessário para cadastrar nova aula

- Antes de cadastrar nova aula, necessário incluir a nova coluna ordem_aula na Model Aula.php

- Antes de cadastrar nova aula, no método store necessário encontrar a última ordem_aula cadastrada, para cadastrar 1 número acima

Criar formulário editar aula
- Criar rota
![]()
- Criar método edit na controller AulaController.php

- Incluir na view listar-aulas (aulas.index) o botão para Editar, passando o id da aula

- Criar rota update e método update


- Criar view editar-aula, com formulário e dados existentes no banco carregados

Apagar registro no banco de dados
- Criar rota

- Criar método destroy

- Incluir na view listar-aulas e visualizar-aula o botão (formulário) para Apagar, passando o id da aula

Como usar try catch com Laravel
- Necessário incluir o try catch na controller, para redirecionar o usuário e enviar uma mensagem de erro.

- Necessário incluir session de erro na view, conforme ex: abaixo

Como usar beginTransaction, commit e rollback
-
Simulação erro (arquivo ClasseController.php): 2 creates, 1 com informações corretas no código e o outro não (1 coluna da tabela deveria ter somente informações int mas em 1 dos creates teve string…)
-
Ao utilizar SQLite, não deu erro pois cadastrou string em um campo integer. Esse cadastro é realizado pois o SQLite utiliza tipagem dinâmica

- com o beginTransation, commit/rollback, se existir erro em 1 das manipulações SQL, nenhuma delas é executada no banco.

Validar formulário no Laravel com request
- criar um arquivo de Request com validações
php artisan make:request NomeArquivoValidacaophp artisan make:request CourseRequest- no arquivo request, passar o atributo name dos elementos (da view) que precisam ser required
- ex:


- importar o CourseRequest na controller, nos métodos necessários (ex atual: método store)

- OBS: necessário retornar true no método authorize do arquivo request, pois por padrão o return é false

- OBS: após a etapa anterior, necessário apresentar na view os erros

- até aqui, o erro será apresentado porém considerando o nome do atributo

- para isso, podemos personalizar as mensagens de validação através do método messages dentro do arquivo Request (CourseRequest.php)


Como salvar log
-
monitorar ações realizadas no sistema (necessário em métodos como cadastrar, editar…)
-
arquivo config/logging.php determina onde os logs serão salvos. Por padrão, os registros de log são salvos em storage/logs/laravel.log
-
ex: incluir registro de logs nas controllers ao cadastrar


Como criar auditoria com Laravel
-
obs: auditoria registra as informações em uma tabela do banco, ao contrário do registro de logs
-
dependência owen-it/laravel-auditing
-
instalar dependência utilizando o composer
composer require owen-it/laravel-auditing- publicar as configurações e as migration para auditoria
php artisan vendor:publish --provider "OwenIt\Auditing\AuditingServiceProvider" --tag="config"php artisan vendor:publish --provider "OwenIt\Auditing\AuditingServiceProvider" --tag="migrations"- executar a migration
php artisan migrate- comando para limpar cache do projeto laravel, pois não estava aparecendo o autocomplete para implementar Auditable
php artisan config:clear- recarregar as classes do Composer
composer dump-autoload
- importar auditoria na model

- verificar os logs de auditoria na tabela audits

- importado auditoria na model Curso e Aula