Есть ли в Doctrine метод, подобный методу findByExample
Hibernate?
Благодарность
Есть ли в Doctrine метод, подобный методу findByExample
Hibernate?
Благодарность
Вы можете использовать метод 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
Да.
Допустим, у вас есть модель под названием «Пользователи». У вас есть следующие два класса
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"));
$users = $userTable->findByIsAdminAndIsModeratorOrIsSuperAdmin(true, true, true);
См. http://www.doctrine-project.org/projects/orm/1.2/docs/manual/dql-doctrine-query-language/en