Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como fazer uma consulta unida na interface de tabelas 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);

Infelizmente, a Zend_Db_Table A interface de relacionamentos não tem muita inteligência relacionada à criação de consultas unidas a partir de seu mapa de referência declarado. A solução de contribuição da comunidade para consultas complexas é o Zend_Db_Table_Select fábrica de consultas.

Observe que você deve fornecer aliases de coluna para o nome e a descrição do fabricante, caso contrário, essas colunas suprimirão o nome e a descrição do modelo na matriz associativa para os dados da linha. Você deve nomear as colunas distintamente para evitar isso.

Mas no seu caso, eu pularia a interface de tabela e a interface de seleção e simplesmente executaria uma consulta SQL diretamente usando o 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%'");

Você obterá os dados de volta como um simples array de arrays associativos, não como um Zend_Db_Table_Rowset . Mas como um conjunto de linhas associado não é gravável de qualquer maneira, você não sacrificou muito.