Executanto operações CRUD com Doctrine

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.

2 Responses to “Executanto operações CRUD com Doctrine”

  1. [...] 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 [...]

  2. Lucas says:

    Michael,

    Parabéns.
    estou gostando muito de aprender a usar essa ferramenta.
    É bem simples e prática.

    Obrigado.

Leave a Reply