sql >> Databasteknik >  >> RDS >> Mysql

Hur gör man en sammanfogad fråga i ZF-tabeller-gränssnittet?

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

Tyvärr Zend_Db_Table relations-gränssnittet har inte mycket intelligens i det relaterat till att skapa sammanfogade frågor från dess deklarerade referenskarta. Den community-bidragande lösningen för komplexa frågor är Zend_Db_Table_Select fråga fabrik.

Observera att du måste ange kolumnalias för tillverkarens namn och beskrivning, annars kommer dessa kolumner att undertrycka modellens namn och beskrivning i den associativa arrayen för raddata. Du bör namnge kolumner tydligt för att undvika detta.

Men i ditt fall skulle jag hoppa över tabellgränssnittet och select-gränssnittet och helt enkelt köra en SQL-fråga direkt med hjälp av Db-adaptern:

$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 tillbaka data som en enkel array av associativa arrayer, inte som en Zend_Db_Table_Rowset . Men eftersom en sammanfogad raduppsättning ändå inte är skrivbar, har du inte offrat mycket.




  1. Är det möjligt att infoga data i en MySQL-vy?

  2. PL/SQL-prestandajustering för LIKE '%...%' jokerteckenfrågor

  3. Att SHA512-hasha ett lösenord i MySQL-databas av Python

  4. SQLite - JOIN-satser