Object Relational Mapper for zend-db

v1.3.5 2018-02-23 11:05 UTC

README

License Scrutinizer Code Quality Total Downloads Latest Stable Version

O ORM Silk (seda em inglês) é um sistema de mapeamento de objetos integrado com a estrutura do Zend Framework 2 que foi pensado para ser prático, leve, e de fácil configuração. Ele permite transformar tabela em objetos e posteriormente acessar os dados utilizando o padrão de busca SQL do Zend. Em outras palavras, o papel dele é mapear seus objetos apenas em nível de arrays. Todo o resto fica com o Zend - transação de arrays com o banco de dados.

composer require minerva-sistemas/silk-orm

Como funciona

Configurações

Classes
  • @configure {"schema":"Cadastro"} - Especifica qual o schema da tabela, se em branco é adotado o schema padrão.
  • @configure {"table":"table_name"} - Especifica qual é a tabela do objeto no banco de dados.
  • @configure {"primary_key":"idtable"} - Especifica qual é a chave primária da tabela.
Propriedades
  • @configure {"ignore":true} - Ignora a propriedade do objeto na construção das queries.
  • @configure {"ignoreIfNull":true} - Ignora a propriedade do objeto, apenas se nula.
  • @configure {"alias":"somecolumn"} - Especifica o nome da coluna da propriedade na tabela.
  • @configure {"type":"\\Garage\\Car"} - Instanciamento automático de objetos mapeáveis.

Como usar

Instanciamento

O exemplo abaixo deve ser seguido quando formos instanciar apenas um objeto. Pode-se usar perfeitamente as clausulas where do Zend tal como usa-se em seus TableGateways, afinal, o Silk usa o TableGateway do ZF2 para construir seus resultados.

$user = new User(1); // pelo valor da chave primária
$user = new User(["name"=>"lucas"]); // por um where com array
$user = new User(function(Select $select){ /* ... */ }); // Pelo select do zf2

Multipla seleção

O exemplo abaixo deve ser seguido quando formos instanciar múltiplos objetos. Para armazenar coleções de objetos, usamos a biblioteca easyframework/collections.

$collection = User::select(["name"=>"lucas"]);
$collection = User::select(function(Select $select){ /* ... */ });

$collection->map(function(User $user){
   echo $user->getCompany()->getName() . "\n";
});

Inserindo novo registro

Quando o objeto é instanciado e não se passa nenhum valor no construtor como parâmetro ele é criado vazio, isto é, não vai ter nenhum valor, nem uma id definida para o mesmo. Quando o objeto tem um id nulo ($company->getId() == null) ao chamar o método save() um novo registro será inserido no banco. Se ele ja tiver um id definido, o registro será atualizado.

$company = new Company();
$company->setName("Minerva Engenharia de Sistemas");
$company->save();

echo $company->getId(); // 1

Atualizando um registro

Quando o objeto já possui uma id definida, e chamamos o método save()o registro cuja chave primária for a id do objeto será atualizado no banco de dados, conforme o exemplo abaixo.

Instanciamento por chave primária
$company = new Company(1);
$company->setName("Minerva");
$company->save();
Instanciamento por array explicita
$company = new Company(['idcompany' => 1]);
$company->setName("Minerva");
$company->save();
Instanciamento por where do ZF2
$company = new Company(function(Select $select){
   $select->where->equalTo('idcompany', '1');
   $select->limit(1);
});
$company->setName("Minerva");
$company->save();
Atualizando múltiplos registros

Atualiza todos os registros onde a coluna nome tiver o valor 'Softwerk'.

Company::select(['name' => 'Minerva'])->map(function(Company $company){
   $company->setName('Minerva Engenharia de Sistemas');
   $company->save();
});

Removendo um registro

Um objeto só será removido quando o sua id estiver definida, assim como nas operações de atualização. Para remover um registro do banco de dados basta chamar o método delete() do objeto, assim como no exemplo abaixo.

$company = new Company(1);
$company->delete();
Removendo vários registros

Exemplo abaixo irá remover todos os objetos onde o valor da coluna name for igual a Softwerk.

Company::select(['name' => 'Minerva'])->map(function(Company $company){
   $company->delete();
});