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本身
我想你在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)