8 – Detalhes sobre Models
Nas adversidades, uns desistem, enquanto outros batem recordes.
Ayrton Senna
O Model representa a primeira letra do MVC.
Models (Modelos) são as classes que servem como camada de negócio na sua aplicação. Isso significa que eles devem ser responsáveis pela gestão de quase tudo o que acontece em relação a seus dados, sua validade, interações e evolução do fluxo de trabalho de informação no domínio do trabalho.
No CakePHP seu modelo de domínio da aplicação é dividido em 2 tipos de objetos principais. Os primeiros são repositories (repositórios) ou table objects (objetos de tabela). Estes objetos fornecem acesso a coleções de dados. Eles permitem a você salvar novos registros, modificar/deletar os que já existem, definir relacionamentos, e executar operações em massa. O segundo tipo de objetos são as entities (entidades). Entities representam registros individuais e permitem a você definir comportamento em nível de linha/registro e funcionalidades.
O ORM (MOR - Mapeamento Objeto-Relacional) nativo do CakePHP especializa-se em banco de dados relacionais, mas pode ser extendido para suportar fontes de dados alternativas.
O ORM do Cakephp toma emprestadas ideias e conceitos dos padrões ActiveRecord e Datamapper. Isso permite criar uma implementação híbrida que combina aspectos de ambos padrões para criar uma ORM rápida e simples de utilizar.
Objetos Table são usados para ser interface para coleções de objetos, ou seja, tabelas. O objeto Entity provê uma interface para um objeto individual, ou seja registros.
Atributos do Model
Indicar nome de configuração do database
public $useDbConfig = 'alternate';
Prefixo das Tabelas
public $tablePrefix = 'alternate_';
Nome do campo Primary Key
public $primaryKey = 'example_id';
Display field
Nomes de campos em tabelas para tabelas relacionadas
Convenção: title ou name
Se diferente indicar no model com:
public $displayField = 'nomedocampo';
Tabela Default
public $useTable = 'users';
Caso receba a mensagem:
Erro: Table useres for model User was not found in datasource default.
Isso aconteceu comigo sempre que instalei o o plugin Cakept_br.
Adicione a variável $use/Table contendo o nome da tabela ao model User
public $useTable = 'usuarios';
Método _setPassword() - este método cria um hash da senha do usuário antes que seja salva e antes que seja validada.
Lógica de negócios
A codificação mostrada abaixo, neste capítulo, sobre os models e o ORM, que é o padrão que o CakePHP usa para lidar com bancos de dados, é muito importante para codificar a lógica de negócios de muitos aplicativos. As operações de CRUD, que são as mais básicas, podemos criar usando o bake, mas a lógica específica de alguns aplicativos somos nós que precisaremos criar. Então devemos criá-la no model, para que esteja disponível nos controllers e possa ser solicitada pelas views.
Um exemplo deste tipo de lógica é a usada no aplicativo de exemplo Finanças, no capítulo 13.5, onde temos que retornar a soma das despesas de um certo mês, somar as receitas do mesmo mês e devolver ambas e também o saldo. O bake não faz isso, somente faz as operações básicas de CRUD, somos nós que devemos fazer manualmente e sempre irá depender de cada aplicativo como faremos isso. Por isso é muito importante conhecer como o CakePHP lida com model, controller, view e cia além do CRUD. Me parece que o pontapé inicial recomendado é seguir os tutoriais de criação de aplicativos existentes no site oficial. Depois ir em frente devorando a documentação e todo o material deste livro foi elaborado para colaborar com esta empreitada.
Detalhes
https://book.cakephp.org/3.0/en/orm.html
Comments fornecido por CComment