在Doctrine中的findByExample

时间:2010-01-13 13:26:59

标签: php orm doctrine

Hibernate findByExample方法 Doctrine 中是否存在方法?

感谢

3 个答案:

答案 0 :(得分:21)

您可以使用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我假设你在谈论 Doctrine 2.x

答案 1 :(得分:8)

是。

假设您有一个名为Users的模型。您有以下两个类

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

答案 2 :(得分:4)

$users = $userTable->findByIsAdminAndIsModeratorOrIsSuperAdmin(true, true, true);

请参阅http://www.doctrine-project.org/projects/orm/1.2/docs/manual/dql-doctrine-query-language/en