2013-06-04 17 views
6

私はDoctrineを使って作業しています。2.3以下のシナリオでは、クエリを設計するのが難しいです。Doctrine multiple where条件

SELECT * FROM source WHERE source_id ='10' or source_id ='100' or source_id ='30' 

私はシングルID選択でこれを行いましたが、これを行う方法がわかりません。

$qry = $this->manager()->create() 
     ->select('e') 
     ->from($this->entity, 'e') 
     ->where('e.id = :id'); 

この中で私を助けてくれる人はいますか? 上記のクエリの作業を知ったら、私は他の問題を解決します。 次のとおりです。最初のもののために

SELECT * FROM source WHERE source_id ='10' and source_name ='test' and source_val ='30' 

答えて

9

あなたのwhere句のように、

->where('e.id IN (:ids)') 
->setParameter('ids', $ids) 

$ids = array('10','100','');

そして、それはのようなものである必要があり、あなたの2番目のクエリに使用して調整するように、

$qry = $this->manager()->create() 
     ->select('e') 
     ->from($this->entity, 'e') 
     ->where('e.source_id = :id') 
     ->andWhere('source_name=?', 'test') 
     ->andWhere('source_val=?', '30') 
+0

私はそれを試し、私はあなたの答えを受け入れるでしょう..あなたの返信をありがとうございます.. @Rikesh – TomPHP

+1

あなたはこれで私を助けることができますhttp://stackoverflow.com/questions/16917684/doctrine- xml-mapping-two-tables – TomPHP

3
を変更
<?php  
$qry = $this->manager()->create() 
    ->select('e') 
    ->from($this->entity, 'e') 
    ->where('e.id = ?', $eid) 
    ->addWhere('source_id = ?', $source_id) 
    ->addWhere('field = ?', $value) 
    ->addWhereIn('id', array(1,2,3)) 
    ->addWhere('id = ? AND name = ?', array($id, $name)); 
?> 

アウトプット

TblName(1,2,3)ではe.id = $ EIDとSOURCE_ID = $ SOURCE_IDとフィールド= $値とID AND(ID = $ IDと名前= $名FROM SELECT E )

+0

これは 'addWhere()'か 'andWhere()'ですか? –

+0

@ToleaBivol symfony 2.3 - symfony 4. @ ahmed AbumostafaからaddWhereIn()という名前の関数は存在しません。 –

1

@RikeshはIN式を使用言いますが、ここでAND表現

->where('e.foo = :foo', 'e.bar = :bar') 
->setParameters([ 
    'foo' => $foo, 
    'bar' => $bar, 
]) 

アウトプット

を連結するための別の良い方法であると同様3210 ... WHERE (e.foo = "foo" AND e.bar = "bar") ...