findByExample in Doctrine

2019-04-04 14:43发布

Is there a method in Doctrine like Hibernate's findByExample method?

thanks

标签: php orm doctrine
3条回答
Lonely孤独者°
2楼-- · 2019-04-04 15:05

Yes.

Let's say you have a model called Users. You have the following two classes

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

class User extends Base_User
{

}

in some other object you can do

$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"));
查看更多
ら.Afraid
3楼-- · 2019-04-04 15:08

You can use the findBy method, which is inherited and is present in all repositories.

Example:

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

You can create findByExample method in one of your repositories using a definition like this:

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

In order for this to work, you will have to create your own base class for the entities, implementing the toArray method.

MyEntity can also be an interface, which your specific entities will have to implement the toArray method again.

To make this available in all your repositories, ensure that you are extending your base repository class - in this example, the MyRepository one.

P.S I assume you are talking about Doctrine 2.x

查看更多
太酷不给撩
4楼-- · 2019-04-04 15:10
$users = $userTable->findByIsAdminAndIsModeratorOrIsSuperAdmin(true, true, true);

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

查看更多
登录 后发表回答