Я хотел бы сопоставить сущность формы самостоятельно. Дело в том, что я работаю с 36 000 городов в базе данных, а Doctrine не возвращает никакого результата, когда я выполняю запрос с помощью findBy. Но я задал это, написав свои методы.
Проблема в том, что мне нужно просить город через поле сущности (потому что есть много данных, я использую select2 с удаленными данными). До сих пор никаких проблем, но когда я отправляю форму, Symfony не может привязывать идентификатор города к записи базы данных из-за отсутствия результата классического метода Doctrine.
Итак, мой вопрос: как я могу сказать Symfony использовать мой метод репозитория вместо Doctrine для привязки моих данных?
Большое спасибо ! И хорошо провести день;)
Метод 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);