2010-01-13 15 views

Respuesta

16

Usted puede utilizar el método findBy, que se hereda y está presente en todos los repositorios

Ejemplo:

$criteria = array('name' => 'someValue', 'status' => 'enabled'); 
$result = $em->getRepository('SomeEntity')->findBy($criteria); 

Puede crear findByExample método en una de sus repositorios utilizando una definición de esta manera:

class MyRepository extends Doctrine\ORM\EntityRepository { 
    public function findByExample(MyEntity $entity) { 
     return $this->findBy($entity->toArray()); 
    } 
} 

Para que esto funcione, usted tendrá que crear su propio clase base para las entidades, implementando el método toArray.

MyEntity también puede ser una interfaz, que sus entidades específicas tendrán que implementar el método toArray de nuevo.

Para que esté disponible en todos sus repositorios, asegúrese de ampliar su clase de repositorio base, en este ejemplo, el MyRepository.

P.S Asumo que está hablando Doctrina 2.x

+0

No estoy hablando de Doctrine2 (lo hice a finales de 2010), pero por ahora, resuelve el problema. – rizidoro

6

Sí.

Digamos que tiene un modelo llamado Usuarios. Tiene las siguientes dos clases

abstract class Base_User extends Doctrine_Record 
{ 
    //define table, columns, etc 
} 

class User extends Base_User 
{ 

} 

en algún otro objeto que puede hacer

$user = new User; 

//This will return a Doctrine Collection of all users with first name = Travis 
$user->getTable()->findByFirstName("Travis"); 

//The above code is actually an alias for this function call 
$user->getTable()->findBy("first_name", "Travis"); 

//This will return a Doctrine Record for the user with id = 24 
$user->getTable()->find(24); 

//This will return a Doctrine Collection for all users with name=Raphael and 
//type = developer 
$user->getTable() 
    ->findByDql("User.name= ? AND User.type = ?", array("Raphael", "developer")); 
+0

Gracias por la respuesta de Travis, pero no es lo que estoy buscando. Quiero hacer algo como esto: $ user = new User; $ user-> name = "rafael"; $ user-> category = "developer"; $ q = Doctrine :: getTable ('Usuario') -> findByExample ($ user); y $ q debería devolver una colección de usuarios con "rafael" como nombre y "desarrollador" como categoría. ¿Sabes cómo puede hacer eso? – rizidoro

+0

Comprueba el último fragmento de código que usa el método findByDql. Eso debería darte lo que estás buscando. – Travis