質問

を使用しているPHP主義ORMを私ます。しかし、いっそう図書き方は次のWHERE節を使用DQL(主義のクエリ言語):

WHERE name='ABC' AND (category1 = 'X' OR category2 = 'X' OR category3 = 'X') 
AND price > 10

たいのですが場所を指定する括弧のでしょう。

私は現在、私のPHPコードです:

->where('name = ?', 'ABC')
->andWhere('category1 = ?', 'X')
->orWhere('category2 = ?', 'X')
->orWhere('category3 = ?', 'X')
->andWhere('price > ?', 10)

でもこのようなもの

WHERE name='ABC' AND category1 = 'X' OR category2 = 'X' OR category3 = 'X' 
AND price > 10

ように、秩序の業務とならないが決まる。

また、間に差はあるのは"が","andWhere"、"addWhere"方法を教えてください。

更新 Okたものは大きかったんでしょうねができない複雑なクエリを使用DQLいてのSQLを手動でのandWhere()メソッドを追加します。しかし、私が使っている場等の義が剥離して囲む括弧:

$q->andWhere("(category1 IN $subcategory_in_clause
            OR category2 IN $subcategory_in_clause 
            OR category3 IN $subcategory_in_clause)");
役に立ちましたか?

解決

私の経験から、複雑な where 機能分以内に括弧("を利用してい主義1.2.1).

$q->where('name = ?', 'ABC')
  ->andWhere('category1 = ? OR category2 = ? OR category3 = ?', array('X', 'X', 'X'))
  ->andWhere('price < ?', 10)

により下記のSQL:

WHERE name = 'ABC' 
  AND (category1 = 'X' OR category2 = 'X' OR category3 = 'X')
  AND price < 10

他のヒント

の正しいということができた 義2-クエリービルダ条件エ...合算はどこでわかりますか? 指摘されているように@Jekis.こちらではの使い方ョンビルダーでこれを解決するように@anushrの例です。

$qb->where($qb->expr()->eq('name', ':name'))
  ->andWhere(
    $qb->expr()->orX(
      $qb->expr()->eq('category1', ':category1'),
      $qb->expr()->eq('category2', ':category2'),
      $qb->expr()->eq('category3', ':category3')
  )
  ->andWhere($qb->expr()->lt('price', ':price')
  ->setParameter('name', 'ABC')
  ->setParameter('category1', 'X')
  ->setParameter('category2', 'X')
  ->setParameter('category3', 'X')
  ->setParameter('price', 10);

したものは大きかったんでしょうねができない複雑なクエリを使用DQLに書いて、以下のSQL文に渡すandWhere()メソッド:

$q->andWhere("(category1 IN $subcategory_in_clause
OR category2 IN $subcategory_in_clause 
OR category3 IN $subcategory_in_clause) AND TRUE");

注のは"TRUE"、hackようにパーサの思を無視し、外側のしるしをつけることになる。

andWhereすものである:
に追加され状態(s)を知る声明

ご安全に利用できる andWhere inplaceの 場所.(ついて紹介し、非常に小さなオーバーヘッドでは下記の2リストの商品です。)

の実施andWhereは:(主義1.2.3)

public function andWhere($where, $params = array())
{
    if (is_array($params)) {
        $this->_params['where'] = array_merge($this->_params['where'], $params);
    } else {
        $this->_params['where'][] = $params;
    }

    if ($this->_hasDqlQueryPart('where')) {
        $this->_addDqlQueryPart('where', 'AND', true);
    }

    return $this->_addDqlQueryPart('where', $where, true);
}

読み込み可能として、

  1. プロセスパラメータ
  2. append 場所 一部のクエリー、 この場合が声明を加え前
  3. 追加条件

との違いがandwhere、addwhereいということなのが大きな差からの最後の時間を拝読させていただきました。私はをお読みになることをおすすめ源義しています。難しい部分があり、充填の穴をドキュメント(多い).複雑な諸表がかっこんでいたりすることを目的としている。

私の経験は、私のように見られる違い:

$q->andWhere("(category1 IN $subcategory_in_clause
            OR category2 IN $subcategory_in_clause 
            OR category3 IN $subcategory_in_clause)");

$q->andWhere("(category1 IN $subcategory_in_clause OR category2 IN $subcategory_in_clause OR category3 IN $subcategory_in_clause)");

最初の文書3ラインのみ。いとは思ってもいなかったのでもあります。

$q->andWhere("category1 IN ( $subcategory_in_clause )
              OR category2 IN ( $subcategory_in_clause )
              OR category3 IN ( $subcategory_in_clause )");

いうような試みのこの異形の合う作品が、ショット

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top