Skip to content
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).

Classes

  • 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

Hierarquia

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.

Tipos

  • 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 Somos

Registros (CRUD)

Os registros são representados pela classe InterAdmin e seus atributos são cadastrados no InterAdmin (CMS).

Criar

  • 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();

Criar registros filhos

  • Vamos supor que multas são registros filhos de Carro
$carro = Carro::create();

$multa = $carro->multas()->create();

$multa->valor = 654.41;
$multa->save();

Obter

// 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');

Obter registros filhos

$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);

Alterar

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 dados

Excluir

Existem 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();

Excluir registros filhos

// Método mágico gerado a partir do nome do tipo filho
$carro->multas()->delete();
Clone this wiki locally