Symfony3存储库方法不起作用

时间:2018-06-07 13:43:02

标签: php repository symfony-3.4

我正在尝试从我的控制器ArticleController调用存储库ArticleRepository中的方法。不过它说:

Undefined method 'afficheArticle'. The method name must start with either findBy or findOneBy!

我的实体文章:(实体\ Article.php)

/**
 * Article
 *
 * @ORM\Table(name="Article", indexes={@ORM\Index(name="I_FK_Article_TypeArticle", columns={"idTypeArticle"})})
 * @ORM\Entity(repositoryClass="erp-gkeep\new_erp\gkeepBundle\Repository\ArticleRepository")
 */
class Article
{

我的ArticleController(Controller \ ArticleController)

 /**
     * @Route("viewArticle2", name="viewArticle2")
     */
    public function listAction2()
    {

        $data = $this->getDoctrine()->getRepository('gkeepBundle:Article')->afficheArticle();

我的ArticleRepository

    <?php
/**
 * Created by PhpStorm.
 */

namespace gkeepBundle\Repository;


use Doctrine\ORM\EntityRepository;

class ArticleRepository extends EntityRepository
{

    public function afficheArticle(){
        $em=$this->getEntityManager();

        $query = $em->createQuery(
            'SELECT a.reference, a.designationfr, a.designationen, a.plan, a.url, a.datecreation, a.idtypearticle
     FROM gkeepBundle:Article a
     '
        );

        $articles = $query->getArrayResult();

        return $articles;
    }
}

如果有人可以帮助我请!我很确定这是一个愚蠢的错误:/

1 个答案:

答案 0 :(得分:0)

映射注释中repositoryClass的值必须是存储库的命名空间+类名,看起来您可能也添加了一些目录结构。 -实际上不是PHP命名空间中的有效字符,因此您现在获得的值肯定是不对的。

尝试

@ORM\Entity(repositoryClass="gkeepBundle\Repository\ArticleRepository")

供参考:当此类名无效时,Doctrine会回退到默认存储库 - 这就是抛出您所看到的错误的原因。