Я пытаюсь выполнить сложный запрос с критериями в проекте Symfony, используя Propel ORM.
запрос, который я хочу сделать, в человеческих словах:
Select from the 'interface' table the registers that:
- 1 are associated with a process (with a link table)
- 2 have a name similat to $name
- 3 its destiny application's name is $apd (application accecible by foreign key)
- 4 its originapplication's name is $apo (application accecible by foreign key)
вот код, который я сделал, и не работает:
$c = new Criteria();
$c->addJoin($linkPeer::CODIGO_INTERFASE,$intPeer::CODIGO_INTERFASE); //1
$c->add($linkPeer::CODIGO_PROCESONEGOCIO,$this->getCodigoProcesonegocio());//1
if($name){
$name = '%'.$name.'%'; //2
$c->add($intPeer::NOMBRE_INTERFASE,$name,Criteria::LIKE); //2
}
if($apd){
$apd = '%'.$apd.'%'; //3
$c->addJoin($appPeer::CODIGO_APLICACION,$intPeer::CODIGO_APLICACION_DESTINO);//3
$c->add($appPeer::NOMBRE_APLICACION,$apd,Criteria::LIKE); //3
}
if($apo){
$apo = '%'.$apo.'%';//4
$c->addJoin($appPeer::CODIGO_APLICACION,$intPeer::CODIGO_APLICACION_ORIGEN);//4
$c->add($appPeer::NOMBRE_APLICACION,$apo,Criteria::LIKE);//4
}
После этого я сделал $c->toString()
, чтобы увидеть сгенерированный SQL, и увидел, что когда я отправляю только значение $ apd, SQL корректен, когда я также отправляю значение $ apo. Но когда я отправляю оба, только $ apo AND
появляется в SQL.
Полагаю, это потому, что вызов $ c-> add (...) такой же, с отдельным параметром, но не совсем уверен. Это ошибка? Каков наилучший способ правильно сформировать мой запрос?
Большое спасибо за ваше время! : D