2010-01-13 39 views

Trả lời

16

Bạn có thể sử dụng phương pháp findBy, được kế thừa và hiện diện trong tất cả các kho lưu trữ.

Ví dụ:

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

Bạn có thể tạo findByExample phương pháp trong một trong các kho của bạn sử dụng một định nghĩa như thế này:

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

Để cho tiện làm việc, bạn sẽ phải tạo riêng của bạn lớp cơ sở cho các thực thể, triển khai phương thức toArray.

MyEntity cũng có thể là giao diện mà các đối tượng cụ thể của bạn sẽ phải triển khai lại phương pháp toArray.

Để làm điều này có sẵn trong tất cả các kho lưu trữ của bạn, hãy đảm bảo rằng bạn đang mở rộng lớp kho lưu trữ cơ sở của mình - trong ví dụ này, MyRepository.

Tái bút: Tôi giả sử bạn đang nói về thuyết 2.x

+0

Tôi không nói về Doctrine2 (tôi đã đặt câu hỏi vào cuối năm 2010), nhưng hiện tại, nó giải quyết được vấn đề. – rizidoro

6

Có.

Giả sử bạn có một mô hình được gọi là Người dùng. Bạn có hai lớp sau

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

class User extends Base_User 
{ 

} 

ở một số đối tượng khác mà bạn có thể làm

$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

Cảm ơn câu trả lời của Travis, nhưng nó không phải là những gì im tìm kiếm. Tôi muốn làm một cái gì đó như thế này: $ user = new User; $ user-> name = "rafael"; $ user-> category = "developer"; $ q = Doctrine :: getTable ('Người dùng') -> findByExample ($ user); và $ q phải trả lại tập hợp người dùng có tên "rafael" làm tên và "nhà phát triển" làm danh mục. Bạn có biết làm thế nào có thể làm điều đó? – rizidoro

+0

Kiểm tra đoạn mã cuối cùng sử dụng phương thức findByDql. Điều đó sẽ giúp bạn có được những gì bạn đang tìm kiếm. – Travis

Các vấn đề liên quan