У меня есть 2 объекта: автор и человек.
В объекте автора есть поле человека, которое фактически является объектом человека:
/** * @ORM\ManyToOne(targetEntity="Person", inversedBy="submission_authors") * @ORM\JoinColumn(name="person_id", referencedColumnName="id") */ protected $person;
Теперь, в репозитории: AuthorRepository, я хотел бы найти некоторых авторов по их первому имени. Для этого мне нужно получить доступ к объекту person для соответствующего автора и посмотреть его имя.
Я пытался:
public function searchAuthors($q) { $authQB = $this->createQueryBuilder( 'a' ) ->select('a') ->where("a.person.firstname LIKE '%".$q."%'"); return $authQB->getQuery()->getResult(); }
Но проблема в том, что я получаю сообщение об ошибке:
[Syntax Error] line 0, col 78: Error: Expected Doctrine\ORM\Query\Lexer::T_LIKE, got '.'
Coud, пожалуйста, помогите мне, как это решить?
Вам нужно будет получить доступ к своим отношениям:
$authQB = $this->createQueryBuilder( 'a' ) ->select('a') ->leftJoin('a.person', 'p') //...
Чтобы узнать немного больше о построителе запросов и совместных таблицах:
Пытаться
$authQB = $this->createQueryBuilder( 'a' ) ->select('a') ->innerJoin('a.person', 'p') ->where('p.firstname LIKE :myStuff') ->setParameter('myStuff', '%'.$q.'%');