如何在ZF表界面中进行连接查询?

2023-12-14

我的数据库和表如下所示:

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

我想要做的是获取制造商名称列以 A 开头的所有型号。 这意味着查询的简单部分应该类似于 $manufacturers->fetchAll("name LIKE '$letter%'");

我正在尝试通过采埃孚关系来实现这一目标,但它不会成功,所以欢迎任何形式的帮助......


$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。但由于连接的行集无论如何都是不可写的,因此您并没有做出太多牺牲。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在ZF表界面中进行连接查询? 的相关文章