Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment faire une requête jointe dans l'interface des tables 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);

Malheureusement, la Zend_Db_Table L'interface de relations n'a pas beaucoup d'intelligence en ce qui concerne la création de requêtes jointes à partir de sa carte de référence déclarée. La solution communautaire pour les requêtes complexes est Zend_Db_Table_Select fabrique de requêtes.

Notez que vous devez donner des alias de colonne pour le nom et la description du fabricant, sinon ces colonnes supprimeront le nom et la description du modèle dans le tableau associatif pour les données de ligne. Vous devez nommer les colonnes distinctement pour éviter cela.

Mais dans votre cas, je sauterais l'interface de table et l'interface de sélection, et j'exécuterais simplement une requête SQL directement à l'aide de l'adaptateur 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%'");

Vous récupérerez les données sous la forme d'un simple tableau de tableaux associatifs, et non sous la forme d'un Zend_Db_Table_Rowset . Mais comme un ensemble de lignes joint n'est de toute façon pas accessible en écriture, vous n'avez pas beaucoup sacrifié.