我想自己映射一个表单的实体。问题是我正在使用数据库中的36000个城市,当我使用findBy执行请求时,Doctrine不会返回任何结果。但是我通过编写我自己的方法来设置它。
问题是我需要通过实体字段要求城市的形式(因为有很多数据,我使用带有远程数据的select2)。到目前为止,没有问题,但是当我提交表单时,Symfony无法将城市的id绑定到数据库条目,因为没有经典的Doctrine方法。
所以,我的问题是:我如何告诉Symfony使用我的存储库的方法而不是Doctrine的方法来绑定我的数据?
非常感谢你 !祝你有个美好的一天;)
答案 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);