solo - subconsultas sql pdf
doctrina de cómo escribir WhereIn() con otra consulta sql dentro (2)
Por lo general, harías algo como:
$q = Doctrine_Query::create()
->from(''User u'')
->whereIn(''u.id'', array(1, 2, 3));
Pero creo que este se ajusta mejor a tus necesidades:
$q = Doctrine_Query::create()
->from(''Foo f'')
->where(''f.group_id IN (SELECT f.group_id FROM Alert a WHERE a.monitor_id = ?)'', 4);
Tengo la siguiente consulta en SQL
... where group_id IN (select group_id from alert where monitor_id = 4);
Quiero escribirlo en Doctrine, pero no sé cómo agregar la selección IN en la cláusula WHEREIN (). alguna idea ?
Esto es lo que hice
$q = $this->createQuery(''u'')
->select(''u.email_address'')
->distinct(true)
// ->from(''sf_guard_user u'')
->innerJoin(''u.sfGuardUserGroup ug'')
->where(''ug.group_id IN(select group_id from alert where monitor_id=?'',$monitor);
$q->execute();
En el sfGuardUserTable.class:
public function getMailsByMonitor($monitor) {
$q = Doctrine_Query::create()->from("alert a")->where("a.monitor_id", $monitor);
$groups_raw = $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY);
$groups = array();
print_r($groups_raw);
foreach ($groups_raw as $gr) {
$groups[] = $gr->id; //line 33
}
$q2 = $this->createQuery(''u'')
->select(''u.email_address'')
->distinct(true)
->innerJoin(''u.sfGuardUserGroup ug'')
->whereIn("ug.group_id", $groups);
return $q2->execute();
}
Una solución posible: select group_id from alert where monitor_id = 4
en una matriz y utilícelo en whereIn
$q = Doctrine_Query::create()->from("alert a")->where("a.monitor_id", 4);
$groups_raw = $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY);
$groups = array();
foreach ($groups_raw as $gr){
$groups[] = $gr->id;
}
$q2 = Doctrine_Query::create()->from("table t")->whereIn("t.group_id", $groups);
Dos consultas en lugar de una, pero definitivamente hacen el truco.