Executar operações CRUD é algo que temos que fazer muito na maioria de nossos projetos e geralmente isso é algo repetitivo e até tedioso. Existem frameworks que facilitam bastante com o scaffolding no entanto tem a desvantagem de retirar sua flexibilidade na personalização destas operações e das views geradas.
Com ORM a parte lógica destas operações fica bem simples sem retirar sua flexibilidade, você ainda precisara criar suas views/html mas pode fazer como bem entender e com isso usar validações dinâmicas, validar regras de negocio, utilizar AJAX em seus componentes, etc.
Utilizando o esquema MySQL do sakila e o Doctrine com o setup do post anterior vou mostrar como executar cada uma destas operações.
Create
Para criar um novo registro uma nova instância do modelo referente a tabela desejada deve ser criado, no exemplo abaixo vou criar um novo ator e salvar/inserir esse ator no banco.
<?php require 'bootstrap.php'; $ator = new Actor(); $ator->first_name = 'Zé'; $ator->last_name = 'Mayer'; $ator->save();
Retrieve
Para buscar um registro uma nova instância da classe Doctrine_Table deve ser criada, essa classe possui métodos para buscar registros e informações da tabela como colunas e relacionamentos. Os métodos de busca são find, findAll, findBy*, findByDql, findBySql e findOneBy. Normalmente o mais usado é o find que faz uma busca pela chave primaria, findBy* é um método “mágico” para filtrar a busca por uma coluna assim como findOneBy que recebe como parâmetro o nome dessa coluna e o valor da busca, findBy[Sql, Dql] filtra a busca com uma cláusula where passada como parâmetro.
<?php // Buscar um ator por seu sobrenome require 'bootstrap.php'; $ator = Doctrine::getTable('Actor')->findByLastName('Mayer'); if($ator->count()) print $ator[0]->first_name . ' ' . $ator[0]->last_name; else print 'Ator não encontrado.';
As buscas com a Doctrine_Table retornam uma Doctrine_Collection populada com instâncias da classe Doctrine_Record, então você pode usar o método count saber se houveram resultados e iterar sobre eles.
Update
Para atualizar um registro você precisa fazer uma busca deste no banco, modificar as colunas que quiser e chamar o método save como é feito ao criar registros.
<?php require 'bootstrap.php'; $ator = Doctrine::getTable('Actor')->find(201); $ator->first_name = 'José'; $ator->save(); print 'Ator: ' . $ator->first_name . ' ' . $ator->last_name;
Delete
Remover registros é ainda mais simples.
<?php require 'bootstrap.php'; $ator = Doctrine::getTable('Actor')->find(201); if($ator) { $ator->delete(); print 'Ator removido com sucesso!'; } else print 'Ator não encontrado.'
Como pode ver nada de SQL, abstração de banco de dados, pouco código, DRY e menos tédio.
[...] This post was mentioned on Twitter by Aguinelo Pedroso and Richard Ikeda, Michael Paul. Michael Paul said: Novo post CRUD em PHP http://bit.ly/OJXvP #doctrine [...]
Michael,
Parabéns.
estou gostando muito de aprender a usar essa ferramenta.
É bem simples e prática.
Obrigado.