2010-01-13 79 views

回答

16

可以使用findBy方法,它是繼承和存在於所有存儲庫。

例子:

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

您可以在倉庫的一個使用這樣的定義創建findByExample方法:

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

爲了這個工作,你必須創建自己的實體的基類,實現了toArray方法。

MyEntity也可以是一個接口,您的具體實體將不得不再次實現toArray方法。

要使您的所有存儲庫都可用,請確保您正在擴展基本存儲庫類 - 在本例中爲MyRepository

P.S我假設你正在談論主義2.X

+0

我不是在談論Doctrine2(我在2010年末提出問題),但現在,它解決了這個問題。 – rizidoro 2012-05-07 18:23:17

6

是的。

比方說,你有一個名爲用戶的模型。您有以下兩類

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

class User extends Base_User 
{ 

} 

在一些其他的對象,你可以做

$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

謝謝回答特拉維斯,但它不是什麼即時尋找。我想要做這樣的事情: $ user = new User; $ user-> name =「rafael」; $ user-> category =「developer」; $ q = Doctrine :: getTable('User') - > findByExample($ user); 和$ q應返回「rafael」作爲名稱和「developer」作爲類別的用戶集合。你知道如何做到這一點? – rizidoro 2010-01-13 18:56:29

+0

檢查使用findByDql方法的最後一段代碼。這應該讓你找到你想要的。 – Travis 2010-01-14 02:52:46