Sylius - 如何实现自定义EntityRepository

时间:2016-09-09 08:04:03

标签: sylius

我试图覆盖我自己实体的存储库时感到有点沮丧。

我需要创建一个自定义存储库方法,以特殊方式获取我的实体列表。一个HavingOrderBy的查询构建器。

问题是如何设置我的配置来说Sylius,采用我的自定义存储库,而不是默认存储库。

我试试这个:

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

这是我的存储库:

<?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会抛出此错误:

  

在渲染模板期间抛出异常(“未定义方法'findCategoriesMenu'。方法名称必须以findBy或findOneBy开头!”)

2 个答案:

答案 0 :(得分:3)

你没有对正确的存储库进行子类化。 ResourceController期望基于Sylius\Component\Resource\Repository\RepositoryInterface的存储库。由于你是Doctrine\ORM\EntityRepository的子类,但事实并非如此。

您的存储库应继承自Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository(或自行实现接口)。

答案 1 :(得分: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   -
 ------------------ -------------------------------------------------------------------

因为这一切都没问题。

当我尝试访问帖子列表时,会出现此错误:

  

在渲染模板期间抛出异常(&#34; Catchable Fatal Error:传递给Sylius \ Bundle的参数4 \ ResourceBundle \ Controller \ ResourceController :: __ construct()必须实现接口Sylius \ Component \ Resource \ Repository \ RepositoryInterface,给出Dinamic \ Bundle \ SyliusBlogBu​​ndle \ Repository \ PostCategoryRepository的实例,在第2767行的/Applications/XAMPP/xamppfiles/htdocs/rosasinbox-sylius/app/cache/dev/appDevDebugProjectContainer.php中调用并定义&#34;)

如果未设置存储库配置,则会显示主帖的错误。然后我的第一篇文章错了,config.yml存储库值没有设置。

现在我又设定了一次,我收到了这个错误。

很抱歉这个混乱。