1

著者と人の2つのエンティティがあります。

著者エンティティには、実際には人物オブジェクトである人物フィールドがあります。

/**
 * @ORM\ManyToOne(targetEntity="Person", inversedBy="submission_authors")
 * @ORM\JoinColumn(name="person_id", referencedColumnName="id")
 */
protected $person;

さて、リポジトリAuthorRepositoryで、何人かの著者をファーストネームで検索したいと思います。これを行うには、対応する作成者の人物オブジェクトにアクセスし、人物の名を確認する必要があります。

私が試した:

 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 '.' 

それを解決する方法を教えてください。

4

2 に答える 2

3

person次のように関係にアクセスする必要があります。

$authQB = $this->createQueryBuilder( 'a' )
    ->select('a')
    ->leftJoin('a.person', 'p')
   //...

クエリビルダーとジョイントテーブルについてもう少し学ぶには:

  • このSO投稿。
于 2013-01-28T11:35:17.110 に答える
1

試す

$authQB = $this->createQueryBuilder( 'a' )
    ->select('a')
    ->innerJoin('a.person', 'p')
    ->where('p.firstname LIKE :myStuff')
    ->setParameter('myStuff', '%'.$q.'%');
于 2013-01-28T11:04:34.830 に答える