findByExample в Доктрине - PullRequest
       13

findByExample в Доктрине

13 голосов
/ 13 января 2010

Есть ли метод в Doctrine , подобный Hibernate findByExample метод?

спасибо

Ответы [ 3 ]

21 голосов
/ 08 декабря 2011

Вы можете использовать метод 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

8 голосов
/ 13 января 2010

Да.

Допустим, у вас есть модель под названием 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"));
3 голосов
/ 05 сентября 2011
$users = $userTable->findByIsAdminAndIsModeratorOrIsSuperAdmin(true, true, true);

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

...