sql >> Database >  >> RDS >> Mysql

Hoe voer ik een samengevoegde query uit in de ZF-tabelleninterface?

$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);

Helaas is de Zend_Db_Table relaties-interface bevat niet veel intelligentie met betrekking tot het maken van samengevoegde query's op basis van de gedeclareerde referentiekaart. De door de gemeenschap bijgedragen oplossing voor complexe vragen is de Zend_Db_Table_Select vraag fabriek.

Merk op dat u kolomaliassen moet opgeven voor de naam en beschrijving van de fabrikant, anders zullen deze kolommen de naam en beschrijving van het model onderdrukken in de associatieve array voor de rijgegevens. U moet kolommen duidelijk een naam geven om dit te voorkomen.

Maar in jouw geval zou ik de tabelinterface en de select-interface overslaan en gewoon een SQL-query rechtstreeks uitvoeren met behulp van de Db-adapter:

$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%'");

U krijgt de gegevens terug als een eenvoudige reeks associatieve arrays, niet als een Zend_Db_Table_Rowset . Maar aangezien een samengevoegde rijenset toch niet beschrijfbaar is, heb je niet veel opgeofferd.




  1. Wat zijn de beperkingen van MS Access?

  2. Maak een dynamische mysql-query met behulp van php-variabelen

  3. MySQL of voorwaarde

  4. Google Apps Script om spreadsheets naar mySQL te exporteren en op meerdere bestanden uit te voeren