0

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);
    ))
;

ClientRepository.php

public function getClients($company)
{
    $qb = $this->createQueryBuilder('c')
        ->select('c')
        ->where('c.company = :company')
        ->setParameter('company', $company)
        ->getQuery();

    return $qb->getResult();
}

実は基本的な$er->findBy(array('company' => $company))方法ですが、私はカスタムgetClients()方法を使用しています

4

1 に答える 1

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);

}

そしてgetClientQueryBuilder、クロージャーで使用する必要があります。

$builder
    ->add('client', 'entity', array(
        'class'         => 'Faktura\FakturaBundle\Entity\Client',
        'query_builder' => function(\Web\MyBundle\Repository\ClientRepository $er) use ($company){
            return $er->getClientsQueryBuilder($company);
    ))
;
于 2013-06-29T21:26:30.340 に答える