web-dev-qa-db-ja.com

findByExample in Doctrine

DoctrineHibernatefindByExampleメソッドのようなメソッドはありますか?

ありがとう

14
rizidoro

継承され、すべてのリポジトリに存在するfindByメソッドを使用できます。

例:

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

次のような定義を使用して、リポジトリの1つにfindByExampleメソッドを作成できます。

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

これを機能させるには、エンティティの独自の基本クラスを作成し、toArrayメソッドを実装する必要があります。

MyEntityは、特定のエンティティがtoArrayメソッドを再度実装する必要があるインターフェイスにすることもできます。

これをすべてのリポジトリで使用できるようにするには、基本リポジトリクラス(この例ではMyRepositoryクラス)を拡張していることを確認してください。

P.Sあなたが話していると思いますDoctrine 2.x

22

はい。

ユーザーというモデルがあるとしましょう。次の2つのクラスがあります

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"));
10
Travis
$users = $userTable->findByIsAdminAndIsModeratorOrIsSuperAdmin(true, true, true);

http://www.doctrine-project.org/projects/orm/1.2/docs/manual/dql-doctrine-query-language/en を参照してください。

3
Carlo Lopez