-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Carlos Rodrigues edited this page Jan 9, 2019
·
4 revisions
Esta página pretende explicar o processo de Mapeamento Objeto Relacional (ORM) utilizado nas classes Jp7\Interadmin\Record e Jp7\Interadmin\Type (antigamente chamadas InterAdmin e InterAdminTipo).
- Record: representa um registro no banco de dados, uma linha na tabela e os seus atributos.
- Type: representa uma seção do site, armazena a estrutura dos dados
Existem hierarquias entre os registros e os tipos do InterAdmin. Como no exemplo abaixo.

-
Editorial Viagem é um tipo. Ele é pai do tipo Destinos e do
tipo Diário de Bordo.
- É fácil saber que eles são tipos, porque eles são itens no menu da esquerda
-
Diário de Bordo possui vários registros
- Você sabe que eles são registros, porque tem vários atributos, como titulo, imagem, etc...
- Um registro de Diário de Bordo possui registros filhos, que são os Posts.
- O tipo contém o cadastro dos campos do tipo de dados que representa. O tipo de "Carro", por exemplo, teria os seguintes campos:
| Nome do Campo | Tipo de Dados | Coluna na Tabela |
|---|---|---|
| Nome | Varchar | varchar_key |
| Id | Integer - PK | id |
| Fabricante | Integer - FK | select_1 |
| Ano | Integer | int_1 |
- O tipo sabe a Url da seção que representa (configurável por projeto, depende do Jp7\Laravel\Router e RecordUrl):
$tipo = new QuemSomosTipo(); // class QuemSomosTipo extends InterAdminTipo
echo $tipo->getUrl(); // Url da página Quem SomosOs registros são representados pela classe InterAdmin e seus atributos são cadastrados no InterAdmin (CMS).
- O método build() cria sem salvar. Deve ser usado quando você vai definir atributos para salvar depois.
$carro = Carro::build(); // $carro já vem com id_tipo, data de criação, e outros campos preenchidos
$carro->nome = 'Corsa';
$carro->ano = 1998;
$carro->cor = '#550077';
$carro->save(); // Só aqui o $carro será salvo no banco de dados- O método create() cria e salva. Deve ser usado quando você já tem os
atributos em um array.
- OBS: Os atributos só serão definidos se o campo estivar na lista de getFillable(), ver Mass_Assignment
$carro = Carro::create([
'marca' => 'Celta'
]);- Por último o new, que você geralmente não deve usar pois o objeto fica ""vazio"", sem id_tipo.
$carro = new Carro;
$carro->id_tipo = 13;
$carro->mostrar = 'S';
$carro->save();- Vamos supor que multas são registros filhos de Carro
$carro = Carro::create();
$multa = $carro->multas()->create();
$multa->valor = 654.41;
$multa->save();// Todos os carros
$carros = Carro::all();
// Primeiro carro
$carro = Carro::first();
// Carro com ID 14
$carro = Carro::find(14);
// Primeiro carro com mais parâmetros
$carro = Carro::where('marca', 'Celta')->orderBy('ano')->first();
// Carro com ID Slug 'camaro-amarelo'
$carro = Carro::find('camaro-amarelo');$carro = Carro::find(14);
// Todas as multas filhas do carro 14
$multas = $carro->multas()->get();
// Primeira multa filha do carro 14
$multa = $carro->multas()->first();
// Multa com Id 15 pertencente ao carro
$multa = $carro->multas()->find(15);Um registro pode ser alterado como um objeto normal, chamando em seguida o método save.
// Obtendo carro
$carro = Carro::find(14);
echo $carro->ano; // 1998
echo $carro->nome; // Corsa
// Alterando
$carro->nome = 'Novo Gol';
$carro->ano = 2009;
$carro->save(); // Dados do $carro serão atualizados no banco de dadosExistem dois tipos de exclusão:
- Exclusão lógica (soft delete): coluna deleted é marcada. Método delete().
- Exclusão física (hard delete): registro é excluído permanentemente. Método forceDelete().
// O mesmo que $carro->deleted = 'S' seguido de $carro->save().
$carro->delete();
// Exclui registro da tabela, não poderá ser recuperado, o mesmo que DELETE FROM...
$carro->forceDelete();// Método mágico gerado a partir do nome do tipo filho
$carro->multas()->delete();