Esiste un metodo in Dottrina come findByExample
metodo Hibernate s'?findByExample in Dottrina
grazie
Esiste un metodo in Dottrina come findByExample
metodo Hibernate s'?findByExample in Dottrina
grazie
È possibile utilizzare il metodo findBy
, che viene ereditato ed è presente in tutti i repository.
Esempio:
$criteria = array('name' => 'someValue', 'status' => 'enabled');
$result = $em->getRepository('SomeEntity')->findBy($criteria);
È possibile creare findByExample
metodo in uno dei repository utilizzando una definizione come questa:
class MyRepository extends Doctrine\ORM\EntityRepository {
public function findByExample(MyEntity $entity) {
return $this->findBy($entity->toArray());
}
}
Affinché questo funzioni, si dovrà creare il proprio classe base per le entità, implementando il metodo toArray
.
MyEntity
può anche essere un'interfaccia, che le specifiche entità dovranno implementare nuovamente il metodo toArray
.
Per rendere questo disponibile in tutti i repository, assicurarsi di estendere la classe del repository di base, in questo esempio, lo MyRepository
.
P.S Presumo si sta parlando Dottrina 2.x
Sì.
Supponiamo di avere un modello chiamato Utenti. Sono disponibili le seguenti due classi
abstract class Base_User extends Doctrine_Record
{
//define table, columns, etc
}
class User extends Base_User
{
}
in qualche altro oggetto che si può fare
$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"));
Grazie per la risposta Travis, ma non è quello che im cercando. Voglio fare qualcosa di simile: $ user = new User; $ user-> name = "rafael"; $ user-> category = "developer"; $ q = Doctrine :: getTable ('Utente') -> findByExample ($ utente); e $ q devono restituire una raccolta di utenti con "rafael" come nome e "sviluppatore" come categoria. Sai come può farlo? – rizidoro
Controllare l'ultimo pezzo di codice che utilizza il metodo findByDql. Questo dovrebbe farti ottenere quello che stai cercando. – Travis
$users = $userTable->findByIsAdminAndIsModeratorOrIsSuperAdmin(true, true, true);
Vedi http://www.doctrine-project.org/projects/orm/1.2/docs/manual/dql-doctrine-query-language/en
Non sto parlando di Doctrine2 (ho fatto una domanda alla fine del 2010), ma per ora, il suo problema è risolto. – rizidoro