php*_*rpa 0 query-builder symfony-forms symfony doctrine-orm
在Symfony2表单中,当试图获取实体时,Symfony期望接收QueryBuilder对象,但有时没有返回实体.在这种情况下,会出现一条错误消息:
期望类型为"Doctrine\ORM\QueryBuilder"的参数,给出"NULL"
如何使query_builder允许选项没有可用的实体.
$builder
->add('client', 'entity', array(
'class' => 'Faktura\FakturaBundle\Entity\Client',
'query_builder' => function(\Web\MyBundle\Repository\ClientRepository $er) use ($company){
return $er->getClients($company);
))
;
Run Code Online (Sandbox Code Playgroud)
ClientRepository.php
public function getClients($company)
{
$qb = $this->createQueryBuilder('c')
->select('c')
->where('c.company = :company')
->setParameter('company', $company)
->getQuery();
return $qb->getResult();
}
Run Code Online (Sandbox Code Playgroud)
实际上,它只是基本$er->findBy(array('company' => $company))方法,但我使用自定义getClients()方法
小智 6
你的Closure应该返回QueryBuilder对象,而不是它的结果.
您的ClientRepository应如下所示:
public function getClients($company)
{
$qb = $this->getClientsQueryBuilder($company);
return $qb->getQuery()->getResult();
}
public function getClientsQueryBuilder($company)
{
return $this->createQueryBuilder('c')
->select('c')
->where('c.company = :company')
->setParameter('company', $company);
}
Run Code Online (Sandbox Code Playgroud)
然后你需要getClientQueryBuilder在你的Closure中使用.
$builder
->add('client', 'entity', array(
'class' => 'Faktura\FakturaBundle\Entity\Client',
'query_builder' => function(\Web\MyBundle\Repository\ClientRepository $er) use ($company){
return $er->getClientsQueryBuilder($company);
))
;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1591 次 |
| 最近记录: |