Я новичок в symfony2.I создал класс репозитория, когда я создал класс сущности через командную строку. Но я не смог получить доступ к своим пользовательским функциям в этом классе репозитория. как создать пользовательский класс репозитория в symfony2? Может ли кто-нибудь дать мне пошаговое объяснение с нуля с некоторым примером кода?
Ниже мой класс хранилища
namespace Mypro\symBundle\Entity; use Doctrine\ORM\EntityRepository; /** * RegisterRepository * This class was generated by the Doctrine ORM. Add your own custom * repository methods below. */ class RegisterRepository extends EntityRepository { public function findAllOrderedByName() { return $this->getEntityManager() ->createQuery('SELECT p FROM symBundle:Register p ORDER BY p.name ASC') ->getResult(); } }
Я так позвонил своему контроллеру
$em = $this->getDoctrine()->getEntityManager(); $pro = $em->getRepository('symBundle:Register') ->findAllOrderedByName();
Я получил следующую ошибку
Undefined method 'findAllOrderedByName'. The method name must start with either findBy or findOneBy!
Есть ли у меня ошибка в коде? Любая ошибка при создании класса репозитория? мне нужно было использовать любой класс.
Я думаю, вы просто забыли зарегистрировать этот репозиторий в своей организации. Вам просто нужно добавить в свой файл конфигурации сущности класс репозитория.
В src / Mypro / symBundle / Resources / config / doctrine / Register.orm.yml:
Mypro\symBundle\Entity\Register: type: entity repositoryClass: Mypro\symBundle\Entity\RegisterRepository
Не забудьте очистить кеш после этого изменения, на всякий случай.
И если вы используете аннотации (вместо yml config), вместо этого добавьте что-то вроде:
/** * @ORM\Entity(repositoryClass="Mypro\symBundle\Entity\RegisterRepository") */
вашему классу Entity для регистрации репозитория
В руководстве есть пошаговое руководство … http://symfony.com/doc/current/book/doctrine.html#custom-repository-classes
Я тоже потерял много времени, когда попал в этот беспорядок конфигурации. Я настраивал класс репозитория в моем Entity как сопоставление аннотаций. Отображение было там, но все же репозиторий не был связан с объектом. Когда я переместил отображение аннотации, то есть @ORM \ Entity (репозиторийClass = «Acme \ DemoBundle \ Entity \ UserRepository»), он работал до последней строки.
/* * User * * @ORM\Table() * @ORM\Entity(repositoryClass="Acme\DemoBundle\Entity\UserRepository") */ class User { ... }`
xml для сопоставления: обновить файл сопоставления xml в папке Resource / config / doctrine, добавить атрибут класса репозитория:
<entity name="Ccd\Bundle\FrontendBundle\Entity\UvUpdatePageContent" table="uv_update_page_content" repository-class="Ccd\Bundle\FrontendBundle\Entity\UvUpdatePageContentRepository">
http://doctrine-mongodb-odm.readthedocs.org/en/latest/cookbook/mapping-classes-to-orm-and-odm.html Затем обновить кеш:
php app/console doctrine:cache:clear-metadata php app/console cache:clear
Прежде всего, для этого вам не требуется настраиваемое репо. Вы можете установить порядок order by в методе find get get: GetRepository:
//$em - entity manager //from Doctrine documentation: findBy(criteria(array), order(array), limit, offset) $result = $em->getRepository('symBundle:Register')->findBy(array(), array('name' => 'ASC'))
Я просто перехожу к документу документации по исходным документам и просматриваю аннотацию, которую я выбрал. Например, я выбрал yaml, добавил конфигурации в файлы Product.orm.yml и Category.orm.yml, а также добавит новые атрибуты php в Entity Methods:
protected $products; public function __construct() { $this->products = new ArrayCollection(); }
для Category.php и
protected $category;
для Product.php
затем запустите php app/console doctrine:generate:entities Acme
, которые успешно добавляют новые геттеры и сеттеры