¿Hay un método en el Doctrina como Hibernate 's findByExample
método?findByExample en Doctrina
gracias
¿Hay un método en el Doctrina como Hibernate 's findByExample
método?findByExample en Doctrina
gracias
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
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"));
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
Comprueba el último fragmento de código que usa el método findByDql. Eso debería darte lo que estás buscando. – Travis
$users = $userTable->findByIsAdminAndIsModeratorOrIsSuperAdmin(true, true, true);
Ver http://www.doctrine-project.org/projects/orm/1.2/docs/manual/dql-doctrine-query-language/en
No estoy hablando de Doctrine2 (lo hice a finales de 2010), pero por ahora, resuelve el problema. – rizidoro