2013-06-04 12 views
6

Pracuję z Doctrine 2.3 Mam trudności z zaprojektowaniem zapytania dla poniższego scenariusza.Doktryna wielokrotna, gdzie stan

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

Zrobiłem to dla pojedynczego wyboru Id, ale nie jestem pewien, jak to zrobić.

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

Czy ktoś może mi w tym pomóc? Jeśli poznam działanie dla powyższego zapytania, rozwiążę inne moje problemy. Jak następuje.

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

Odpowiedz

9

Na pierwszej zmianie klauzuli WHERE jak,

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

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

i wykorzystanie oraz stan dla drugiego zapytania powinno być coś,

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

Spróbuję, a kiedy pracuję, przyjmuję twoją odpowiedź .. Dziękuję za odpowiedź .. @Rikesh – TomPHP

+1

możesz mi pomóc w tym http://stackoverflow.com/questions/16917684/doctrine- xml-mapping-dwa-tabele – 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)); 
?> 

wyjście

e SELECT FROM WHERE e.id tblname eid = $ = $ I SOURCE_ID SOURCE_ID field = $ wartość i identyfikator IN (1,2,3) i (id = $ id = $ i nazwa Nazwa)

+0

Czy to jest 'addWhere()' lub 'andWhere()'? –

+0

@ToleaBivol To jest andWhere() i według mojej wiedzy nie istnieje funkcja o nazwie addWhereIn() z symfony 2.3 - symfony 4. @ ahmed Abumostafa. –

1

Jak @Rikesh mówi używać IN wyrażenie ale tu jest inny dobry sposób, aby złączyć AND wyrażeń

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

wyjście

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