2010-01-13 16 views

risposta

16

È 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

+0

Non sto parlando di Doctrine2 (ho fatto una domanda alla fine del 2010), ma per ora, il suo problema è risolto. – rizidoro

6

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")); 
+0

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

+0

Controllare l'ultimo pezzo di codice che utilizza il metodo findByDql. Questo dovrebbe farti ottenere quello che stai cercando. – Travis