在Symfony2中映射自己的表单

时间:2015-02-13 14:47:48

标签: php forms symfony dictionary doctrine

我想自己映射一个表单的实体。问题是我正在使用数据库中的36000个城市,当我使用findBy执行请求时,Doctrine不会返回任何结果。但是我通过编写我自己的方法来设置它。

问题是我需要通过实体字段要求城市的形式(因为有很多数据,我使用带有远程数据的select2)。到目前为止,没有问题,但是当我提交表单时,Symfony无法将城市的id绑定到数据库条目,因为没有经典的Doctrine方法。

所以,我的问题是:我如何告诉Symfony使用我的存储库的方法而不是Doctrine的方法来绑定我的数据?

非常感谢你 !祝你有个美好的一天;)

1 个答案:

答案 0 :(得分:0)

方法findBy()请求一个数组参数,有时人们会错过:

$result = $this->getDoctrine()->getManager()
           ->getRepository("AcmeDemoBundle")->findBy(array(
               "city" => $city)
            );

如果您想使用存储库,只需将其映射到您的类:

/**
* @ORM\Entity(repositoryClass="Acme/DemoBundle/Repository/CountryRepository")
*/
class Country
{ ... } 

然后在

class CountryRepository extends EntityRepository
{
    public function getMySpecificCity($city)
    {
       $qb = $this->createQueryBuilder('c');
       $cities = $qb->select(*)
                    ->where("c.city =:city ")->setParameter('city', $city)
                    ->getQuery()
                    ->getResult();

       return $cities;
    }
    ...
}

所以你可以按照以下方式使用它:

$result = $this->getDoctrine()->getManager()
           ->getRepository("AcmeDemoBundle")->getMySpecificCity($city);