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

Hvordan laver man en sammenføjet forespørgsel i ZF-tabeller-grænsefladen?

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

Desværre Zend_Db_Table relations-grænsefladen har ikke meget intelligens i det relateret til oprettelse af forenede forespørgsler fra dets erklærede referencekort. Den community-bidragede løsning til komplekse forespørgsler er Zend_Db_Table_Select forespørgselsfabrik.

Bemærk, at du skal angive kolonnealiaser for producentens navn og beskrivelse, ellers vil disse kolonner undertrykke modellens navn og beskrivelse i det associative array for rækkedataene. Du bør navngive kolonner tydeligt for at undgå dette.

Men i dit tilfælde ville jeg springe tabelgrænsefladen og select-grænsefladen over og blot udføre en SQL-forespørgsel direkte ved hjælp af Db-adapteren:

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

Du får dataene tilbage som et simpelt array af associative arrays, ikke som et Zend_Db_Table_Rowset . Men da et samlet rækkesæt alligevel ikke kan skrives, har du ikke ofret meget.




  1. Opdel varchar i separate kolonner i Oracle

  2. Sådan opretter du en Schema Bound Stored Procedure i SQL Server

  3. Puma Cluster-konfiguration på Heroku

  4. Adgang med Microsoft SQL Server – Importer store datasæt ved hjælp af SSIS