Existe-t-il une méthode dans Doctrine comme Hibernate méthode findByExample
?findByExample in Doctrine
merci
Existe-t-il une méthode dans Doctrine comme Hibernate méthode findByExample
?findByExample in Doctrine
merci
Vous pouvez utiliser la méthode findBy
, qui est héritée et est présent dans tous les dépôts.
Exemple:
$criteria = array('name' => 'someValue', 'status' => 'enabled');
$result = $em->getRepository('SomeEntity')->findBy($criteria);
Vous pouvez créer méthode findByExample
dans l'un de vos dépôts en utilisant une définition comme ceci:
class MyRepository extends Doctrine\ORM\EntityRepository {
public function findByExample(MyEntity $entity) {
return $this->findBy($entity->toArray());
}
}
Pour que cela fonctionne, vous devrez créer votre propre classe de base pour les entités, implémentant la méthode toArray
.
MyEntity
peut également être une interface, que vos entités spécifiques devront à nouveau implémenter la méthode toArray
.
Pour que cela soit disponible dans tous vos référentiels, assurez-vous d'étendre votre classe de référentiel de base - dans cet exemple, la classe MyRepository
.
P.S Je suppose que vous parlez de Doctrine 2.x
Oui.
Disons que vous avez un modèle appelé Utilisateurs. Vous avez les deux classes suivantes
abstract class Base_User extends Doctrine_Record
{
//define table, columns, etc
}
class User extends Base_User
{
}
dans un autre objet que vous pouvez faire
$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"));
Merci pour la réponse Travis, mais ce n'est pas ce que je cherche. Je veux faire quelque chose comme ceci: $ user = new User; $ utilisateur-> name = "rafael"; $ utilisateur-> category = "développeur"; $ q = Doctrine :: getTable ('Utilisateur') -> findByExample ($ user); et $ q devrait retourner une collection d'utilisateurs avec "rafael" comme nom et "développeur" comme catégorie. Savez-vous comment faire cela? – rizidoro
Vérifiez la dernière partie du code qui utilise la méthode findByDql. Cela devrait vous donner ce que vous cherchez. – Travis
$users = $userTable->findByIsAdminAndIsModeratorOrIsSuperAdmin(true, true, true);
Voir http://www.doctrine-project.org/projects/orm/1.2/docs/manual/dql-doctrine-query-language/en
Je ne parle pas de Doctrine2 (j'ai posé la question fin 2010), mais pour l'instant, ça résout le problème. – rizidoro