sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo hacer una consulta conjunta en la interfaz de tablas ZF?

$models = new Models();
$select = $models->select(Zend_Db_Table::SELECT_WITH_FROM_PART);
$select->setIntegrityCheck(false)
       ->join(array("a"=>"manufacturers"), 'models.manufacturer_id = a.id',
         array("man_name"=>"name", "man_description"=>"description"))
       ->where("a.name LIKE 'A%'");
$rowset = $models->fetchAll($select);

Lamentablemente, la Zend_Db_Table La interfaz de relaciones no tiene mucha inteligencia relacionada con la creación de consultas unidas a partir de su mapa de referencia declarado. La solución aportada por la comunidad para consultas complejas es Zend_Db_Table_Select fábrica de consultas.

Tenga en cuenta que debe proporcionar alias de columna para el nombre y la descripción del fabricante, o de lo contrario, estas columnas suprimirán el nombre y la descripción del modelo en la matriz asociativa para los datos de la fila. Debe nombrar las columnas claramente para evitar esto.

Pero en su caso, me saltaría la interfaz de la tabla y la interfaz de selección, y simplemente ejecutaría una consulta SQL directamente usando el adaptador Db:

$data = $db->fetchAll("
  SELECT m.*, a.name AS man_name, a.description AS man_description
  FROM Models m JOIN Manufacturers a ON m.manufacturer_id = a.id
  WHERE a.name LIKE 'A%'");

Obtendrá los datos como una matriz simple de matrices asociativas, no como un Zend_Db_Table_Rowset . Pero dado que un conjunto de filas unido no se puede escribir de todos modos, no ha sacrificado mucho.