Mysql
 sql >> Database >  >> RDS >> Mysql

Come eseguire una query unita nell'interfaccia delle tabelle 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);

Sfortunatamente la Zend_Db_Table l'interfaccia delle relazioni non ha molta intelligenza relativa alla creazione di query unite dalla sua mappa di riferimento dichiarata. La soluzione fornita dalla community per query complesse è Zend_Db_Table_Select fabbrica di query.

Nota che devi fornire alias di colonna per il nome e la descrizione del produttore, altrimenti queste colonne sopprimeranno il nome e la descrizione del modello nell'array associativo per i dati di riga. Dovresti nominare le colonne in modo distinto per evitarlo.

Ma nel tuo caso, salterei l'interfaccia della tabella e l'interfaccia di selezione ed eseguirei semplicemente una query SQL direttamente utilizzando l'adattatore 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%'");

Otterrai i dati come un semplice array di array associativi, non come un Zend_Db_Table_Rowset . Ma poiché un set di righe unito non è comunque scrivibile, non hai sacrificato molto.