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
@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.
@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.
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
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";
});
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
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.
$company = new Company(1);
$company->setName("Minerva");
$company->save();
$company = new Company(['idcompany' => 1]);
$company->setName("Minerva");
$company->save();
$company = new Company(function(Select $select){
$select->where->equalTo('idcompany', '1');
$select->limit(1);
});
$company->setName("Minerva");
$company->save();
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();
});
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();
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();
});