findByExample в доктрине
есть ли способ в доктрина как спящий режим ' s findByExample
способ?
спасибо
3 ответов
можно использовать 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
да.
предположим, у вас есть модель под названием 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"));
$users = $userTable->findByIsAdminAndIsModeratorOrIsSuperAdmin(true, true, true);
см http://www.doctrine-project.org/projects/orm/1.2/docs/manual/dql-doctrine-query-language/en