2016-12-12 6 views
0

複数のWHEREステートメントでクエリを書きたいと思います。DQLと複数のWHEREステートメント

$query = $this->createQueryBuilder('s'); 

    $query->select('s.id,s.internalId as internal_id,s.firstName as first_name,s.lastName as last_name,st.name as store_name,sts.name as status_name') 
     ->leftJoin('s.store', 'st') 
     ->leftJoin('s.studentStatus', 'sts') 
     ->where($query->expr()->orx(
      //$query->expr()->eq('s.store_id', ':location'), 
      $query->expr()->like('s.internalId', ':internalId'), 
      $query->expr()->like($query->expr()->concat($query->expr()->literal(' '), 'lower(s.firstName)'), ':name'), 
      $query->expr()->like($query->expr()->concat($query->expr()->literal(' '), 'lower(s.lastName)'), ':name'), 
      $query->expr()->like($query->expr()->concat($query->expr()->concat($query->expr()->literal(' '), 'lower(s.firstName)'), $query->expr()->concat($query->expr()->literal(' '), 'lower(s.lastName)')), ':name'), 
      $query->expr()->like($query->expr()->concat($query->expr()->concat($query->expr()->literal(' '), 'lower(s.lastName)'), $query->expr()->concat($query->expr()->literal(' '), 'lower(s.firstName)')), ':name') 
     )) 
     ->setParameter('name', "%{$term}%") 
     ->setParameter('internalId', "%{$internalId}") 
     //->setParameter('location', "{$location}") 
     ->orderBy('s.lastName', 'ASC') 
     ->setMaxResults((int) $limit); 

上記のクエリのコメント行は機能しません。

+0

何を意味するのですか?たぶんあなたは "andWhere"を意味するのでしょうか? –

+0

はい!また、うまく動作しません。私は値が私のクエリで何が間違っている列の値と等しいかチェックしたい。 ? – Developer

答えて

-1

最も重要なことは、我々は、エンティティ変数名に持ちます。

私は上記のクエリでやった間違いは、私はデータベースのカラム名(STORE_ID)の代わりに、私の間違い実現エンティティ列名(storeId)

Reference Source

を使用しています。

+0

これはあなたの質問に対する答えではありません。代わりにグレゴゴの答えを受け入れるべきです。 – MilanG

2

DoctrineQueryBuilder(DQL)は、それらのhelper methodsがあります

->where($where) 
->andWhere($where) 
->orWhere($where) 

もDQLはexpressionsを構築することができます:

$qb->add('select', new Expr\Select(array('u'))) 
    ->add('from', new Expr\From('User', 'u')) 
    ->add('where', $qb->expr()->orX(
     $qb->expr()->eq('u.id', '?1'), 
     $qb->expr()->like('u.nickname', '?2') 
    )) 
    ->add('orderBy', new Expr\OrderBy('u.name', 'ASC')); 

whereをクリア以前のすべてのwhereステートメントを使用します。

orWhere場所OR次のステートメントの場合。

andWhere場所AND次のステートメントの場合。

あなたはそのようなクエリを構築する必要があります。私たちはSymfony2の

に教義を使用するときに我々は、テーブルの列名を使用してはならない持って

$query = $this->createQueryBuilder('s') 
    ->select('s.id,s.internalId as internal_id,s.firstName as first_name,s.lastName as last_name,st.name as store_name,sts.name as status_name') 
    ->leftJoin('s.studentStatus', 'sts') 
    ->leftJoin('s.store', 'st') 
    ->where('s.store_id = :location') // not working 
    ->andWhere('lower(s.firstName) LIKE :name') 
    ->orWhere('lower(s.lastName) LIKE :name') 
    ->orWhere('s.internalId LIKE :internalId') 
    ->setParameter('name', "%{$term}%") 
    ->setParameter('internalId', "%{$term}%") 
    ->setParameter('location', $location) 
    ->orderBy('s.lastName', 'ASC') 
    ->setMaxResults((int) $limit) 
    ->getQuery(); 
+0

提案のおかげで、私はあなたの構文構造で私のクエリを変更しました。その場所は動作しませんが、その場所は動作しません。列は同じ表に存在します。 – Developer

関連する問題