私はSymfony2のホテルのウェブサイトを構築しています。各ホテルには、セルフケータリング、オールインクルーシブなど多くのボードベースのオプションが用意されています。DoctrineクエリWHERE IN - many to many
私の検索フォームには、場所、価格、星の評価、ボードの基準などのすべてのフィールドでフィルタリングできます。ボードベースは、複数選択チェックボックスです。ここで
ユーザーが複数のボードベースのオプションを選択すると、私は現在
$repo = $this->getDoctrine()->getRepository("AppBundle:Accommodation");
$data = $form->getData();
$qb = $repo->createQueryBuilder("a")
->innerJoin("AppBundle:BoardType", "b")
->where("a.destination = :destination")
->setParameter("destination", $data['destination'])
->andWhere("a.status = 'publish'");
if (count($data['boardBasis']) > 0) {
$ids = array_map(function($boardBasis) {
return $boardBasis->getId();
}, $data['boardBasis']->toArray());
$qb->andWhere($qb->expr()->in("a.boardBasis", ":ids"))
->setParameter("ids", $ids);
}
(エラーを投げている)...この方法でそれを処理していますがホテルのエンティティ
のプロパティ宣言である/**
* @ORM\ManyToMany(targetEntity="BoardType")
* @ORM\JoinTable(name="accommodation_board_type",
* joinColumns={@ORM\JoinColumn(name="accommodation_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="board_type_id", referencedColumnName="id")}
* )
*/
private $boardBasis;
私は現在取得しています
エラーは次のとおりです。
[Semantical Error] line 0, col 177 near 'boardBasis I': Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected.
フォームを送信でそして、ボードタイプのvar_dump
を使用して、私は取得しています:
object(Doctrine\Common\Collections\ArrayCollection)[3043]
private 'elements' =>
array (size=2)
0 =>
object(AppBundle\Entity\BoardType)[1860]
protected 'shortCode' => string 'AI' (length=2)
protected 'id' => int 1
protected 'name' => string 'All-Inclusive' (length=13)
protected 'description' => null
protected 'slug' => string 'all-inclusive' (length=13)
protected 'created' =>
object(DateTime)[1858]
...
protected 'updated' =>
object(DateTime)[1863]
...
1 =>
object(AppBundle\Entity\BoardType)[1869]
protected 'shortCode' => string 'BB' (length=2)
protected 'id' => int 2
protected 'name' => string 'Bed & Breakfast' (length=15)
protected 'description' => null
protected 'slug' => string 'bed-breakfast' (length=13)
protected 'created' =>
object(DateTime)[1867]
...
protected 'updated' =>
object(DateTime)[1868]
...
が、私はこのクエリの正しい構文を見つけることができないよう、私は過去に数回行っている(そして、それは痛み毎時間だった)が、私はそれがどのように行われたか覚えていない。私はIDのマッピングなしで、ArrayCollection
を直接に渡しました。
createQuery
を使用してDQLを使用して差異があるかどうかを確認してください。
この問題を持つ任意の助けをいただければ幸いでは、あなたが参加しているようですが、完全には完了していない私には見えます
DQLの作業を知っていても、QueryBuilderを使用してDQLを実行する方法がわからない場合は、ここでDQLを投稿してください。そうしないと、より多くの情報(すべてのquerybuilder呼び出し)が必要になります。 – Miro
DQLはもう1つのオプションです。私はquerybuilderの残りの部分を追加することができます。その非常に単純な – Scriptable
あなたは属性boardBasisをホテルのエンティティに表示していますが、次にa.boardBasisを使用しています。これはAccomodationエンティティ? youreの式exprを()を使用している場合 – Miro