如何做到在ZF表接口连接查询?(How to do a joined query in the ZF

2019-07-17 18:25发布

我有db和我的表是这样的:

替代文字http://img15.imageshack.us/img15/2568/stackdijag.png

我想要做的是让地方的厂家名称列以A开头的所有车型这意味着,查询简单的部分应该像$ manufacturers->使用fetchall(“名LIKE‘$字母%’”);

我试图用ZF关系,做到这一点,但它不会,那么任何形式的帮助是值得欢迎...

Answer 1:

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

不幸的是, Zend_Db_Table关系的接口并没有在它大量情报,与创建从其宣称的参考地图加入查询。 对于复杂的查询社区提供的解决方案是Zend_Db_Table_Select的查询工厂。

请注意,你必须给列别名制造商的名称和说明,否则这些列将用于该行数据关联数组中抑制模型的名称和说明。 您应该为列清楚,以避免这种情况。

但是,在你的情况,我会跳过表界面和选择界面,并且只需使用DB适配器执行一个SQL查询直接:

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

你会找回数据关联数组的一个简单的数组,而不是作为一个Zend_Db_Table_Rowset 。 但因为加入了行集是不可写,无论如何,你都没有太大的牺牲。



文章来源: How to do a joined query in the ZF tables interface?