2016-09-09 2 views
0

Я немного расстроен, пытаясь переопределить хранилище своей собственной сущности.Sylius - Как реализовать пользовательский EntityRepository

Мне нужно создать собственный метод репозитория, чтобы получить список моих объектов специальным способом. Один queryBuilder с Having и OrderBy.

Вопрос в том, как я могу настроить свою конфигурацию, чтобы сказать Sylius, взять мой пользовательский репозиторий, а не по умолчанию.

Я стараюсь это:

sylius_resource: 
    resources: 
     dinamic.category: 
      classes: 
       model: App\Bundle\SyliusBlogBundle\Entity\PostCategory 
       repository: App\Bundle\SyliusBlogBundle\Repository\PostCategoryRepository 

Это мой Repository:

<?php 

namespace App\Bundle\SyliusBlogBundle\Repository; 

use Doctrine\ORM\EntityRepository; 

class PostCategoryRepository extends EntityRepository 
{ 
    public function findCategoriesMenu() 
    { 
     $queryBuilder = $this->createQueryBuilder('c'); 
     return $queryBuilder 
     ->addSelect('COUNT(p.id) as totalPosts') 
     ->leftJoin('c.posts', 'p') 
     ->andWhere('p.published = true') 
     ->having('totalPosts > 0') 
     ->addGroupBy('p.id') 
     ; 
    } 
} 

Когда я пытаюсь использовать этот метод, Symfony бросает мне эту ошибку:

An exception has been thrown during the rendering of a template ("Undefined method 'findCategoriesMenu'. The method name must start with either findBy or findOneBy!")

ответ

3

Ну, вы не подклассифицируете правильный репозиторий. ResourceController ожидает репозиторий на основе Sylius\Component\Resource\Repository\RepositoryInterface. Поскольку вы являетесь подклассом от Doctrine\ORM\EntityRepository, это не так.

Ваш репозиторий должен наследовать от Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository (или реализовать интерфейс самостоятельно).

+0

Вы правы Стеффен! Он работает, спасибо вам большое. –

0

я ответить к сообщению правильно вставить ответ app/console debug:container dinamic.repository.category

Information for Service "dinamic.repository.category" 
===================================================== 

------------------ ------------------------------------------------------------------- 
    Option    Value 
------------------ ------------------------------------------------------------------- 
    Service ID   dinamic.repository.category 
    Class    Dinamic\Bundle\SyliusBlogBundle\Repository\PostCategoryRepository 
    Tags    - 
    Scope    container 
    Public    yes 
    Synthetic   no 
    Lazy    no 
    Synchronized  no 
    Abstract   no 
    Autowired   no 
    Autowiring Types - 
------------------ ------------------------------------------------------------------- 

Поскольку здесь все в порядке.

Когда я пытаюсь получить доступ к списку сообщений появляется эта ошибка: когда конфигурационный репозиторий не был установлен

An exception has been thrown during the rendering of a template ("Catchable Fatal Error: Argument 4 passed to Sylius\Bundle\ResourceBundle\Controller\ResourceController::__construct() must implement interface Sylius\Component\Resource\Repository\RepositoryInterface, instance of Dinamic\Bundle\SyliusBlogBundle\Repository\PostCategoryRepository given, called in /Applications/XAMPP/xamppfiles/htdocs/rosasinbox-sylius/app/cache/dev/appDevDebugProjectContainer.php on line 2767 and defined")

Ошибка основного поста появляется. Тогда мой первый пост был неправильным, на config.yml значение репозитория не было установлено.

Теперь я установил его в другой раз, и я получил эту ошибку.

Извините за путаницу.