在ObjectRepository类中找不到方法'QueryBuilder'

Joh*_*Doe 4 php query-builder symfony doctrine-orm phpstorm

Symfony和Doctrine的新手

我试图在Symfony项目中通过Doctrine从MySQL数据库中获取一些对象.我是用createQueryBuilder做的;

$repository = $this->getDoctrine()
    ->getRepository('mcsyncBundle:DB');
$query = $repository->createQueryBuilder('p')
    ->select('p')
    ->where('(p.created=:)' . $till)
    ->setParameter('created', $till)
    ->orderBy('p.created', 'ASC')
    ->getQuery();
$PackDB = $query->getResult();
Run Code Online (Sandbox Code Playgroud)

但我一直收到错误:

*Method 'QueryBuilder' not found in class \Doctrine\Common\Persistence\ObjectRepository*.
Run Code Online (Sandbox Code Playgroud)

有谁能解释(修复)这个问题?

编辑:此错误来自PHPStorm内部,而不是来自Symfony本身

Ryb*_*bus 8

我想你在Controler文件中写了那个代码.QueryBuilders应位于Repository文件中.因为/Entity/Plop.php,你应该也有/Entity/PlopRepository.php.

PlopRepository.php

namespace Foo\BarBundle\Entity;
use Doctrine\ORM\EntityRepository;

class PlopRepository extends EntityRepository
{
    public function getCreatedP()
    {
        $qb = $this->createQueryBuilder('p')
                  ->select('p')
                  ->where('p.created = :created')
                  ->setParameter('created', $till)
                  ->orderBy('p.created', 'ASC');

        return $qb->getQuery()
                  ->getResults();
     }
     // ...
}
Run Code Online (Sandbox Code Playgroud)

编辑1:->where('...')我修正了你的陈述中的错误;)

编辑2:完成,控制器部分:

TotoController.php

public function getPlopAction() 
{
     $entityManager = $this->getDoctrine()->getManager();
     $plopRepository = $entityManager->getRepository('FooBarBundle:Plop');  
     $plops = $plopRepository->getCreatedP();
     // ...
}
Run Code Online (Sandbox Code Playgroud)