2013-06-04 33 views
6

Tôi đang làm việc với Doctrine 2.3 Tôi đang gặp khó khăn trong việc thiết kế một truy vấn cho kịch bản dưới đây.Giáo lý nhiều nơi có điều kiện

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

Tôi đã làm điều này để chọn Id duy nhất nhưng tôi không chắc chắn cách thực hiện việc này.

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

Ai đó có thể giúp tôi trong việc này không? Nếu tôi biết cách làm việc cho truy vấn trên, tôi sẽ giải quyết các vấn đề khác của mình .. Là Số điện thoại.

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

Trả lời

9

Đối với người đầu tiên thay đổi mệnh đề where của bạn như thế nào,

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

đâu $ids = array('10','100','');

Và để sử dụng và điều kiện để truy vấn thứ hai của bạn cần một cái gì đó như thế nào,

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

Tôi sẽ thử và khi tôi làm việc, tôi sẽ chấp nhận câu trả lời của bạn .. Cảm ơn bạn đã trả lời .. @Rikesh – TomPHP

+1

bạn có thể giúp tôi trong http://stackoverflow.com/questions/16917684/doctrine- xml-mapping-two-table – 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)); 
?> 

OutPut

CHỌN TỪ TblName WHERE e.id = $ eid AND source_id = $ source_id AND field = $ value VÀ id IN (1,2,3) AND (id = $ id AND name = $ Name)

+0

Có phải 'addWhere()' hay 'andWhere()'? –

+0

@ToleaBivol Đó là vàWhere() và kiến ​​thức của tôi không tồn tại một hàm có tên addWhereIn() từ symfony 2.3 - symfony 4. @ ahmed Abumostafa. –

1

Giống như @Rikesh nói sử dụng IN biểu hiện nhưng đây là một cách tốt đẹp để nối AND biểu

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

Output

... WHERE (e.foo = "foo" AND e.bar = "bar") ...

Các vấn đề liên quan