sql >> Databáze >  >> RDS >> Mysql

Jak provést spojený dotaz v rozhraní tabulek 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);

Bohužel Zend_Db_Table Vztahové rozhraní nemá mnoho inteligence související s vytvářením spojených dotazů z deklarované referenční mapy. Řešením pro složité dotazy s příspěvky komunity je Zend_Db_Table_Select továrna dotazů.

Všimněte si, že musíte zadat aliasy sloupců pro název a popis výrobce, jinak tyto sloupce potlačí název a popis modelu v asociativním poli pro data řádku. Abyste tomu zabránili, měli byste sloupce pojmenovat jasně.

Ale ve vašem případě bych přeskočil rozhraní tabulky a rozhraní select a jednoduše provedl dotaz SQL přímo pomocí adaptéru 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%'");

Data získáte zpět jako jednoduché pole asociativních polí, nikoli jako Zend_Db_Table_Rowset . Ale protože spojená sada řádků stejně není zapisovatelná, moc jste toho neobětovali.




  1. Jak zajistit, aby Django fungovalo s nepodporovanými ovladači MySQL, jako je gevent-mysql nebo ovladač MySQL společnosti Concurrence?

  2. Pyodbc – název zdroje dat nebyl nalezen a není zadán žádný výchozí ovladač

  3. Změní se ID prostředku při každém spuštění aplikace

  4. Změňte výchozí jazyk přihlášení na serveru SQL Server