zf多对多关系,如何在没有第二次查找的情况下查找存储在中间表中的值

时间:2013-07-02 10:32:13

标签: zend-framework zend-db-table

我在两个表之间有多对多关系,用中间表表示。我正在使用ZF1表关系方法在我的应用程序中建模数据库,这很好。我正在努力的一件事是在执行多对多查找时从中间表中提取数据。例如:

productsTable

PRODUCT_ID, PRODUCT_NAME

CustomerTable的

CUSTOMER_ID, CUSTOMER_NAME

salesTable

CUSTOMER_ID, PRODUCT_ID, date_of_sale

在这种情况下,销售表是中间表,客户和产品之间的多对多关系。我将referenceMap添加到产品和客户的销售表模型以及依赖表“sales”到产品表模型和客户表模型。

然后,我可以成功使用以下代码获取给定客户的所有产品(反之亦然)。

$productTable = new productsTable();
$product = $productTable->find(1)->current();


$customers = $product->findManyToManyRowset('customerTable','salesTable');

但它不包括返回的行集中的“date_of_sale”值。有没有办法在不使用单独的数据库查找的情况下包含中间表中的值。我在zf文档中看不到任何内容。

任何帮助都会很酷。 我希望最终用数据映射器实现替换zend_table,因为它在执行的数据库查询数量方面看起来非常低效,这可以通过稍微复杂的SQL连接查询而不是多个简单选择来大大减少但是现在我卡住了有这个。

感谢。

1 个答案:

答案 0 :(得分:0)

您可以在代码中使用JOIN查询来进行一次调用。据我了解,您想构建此查询

SELECT p.*, c.*, s.date_of_sale FROM sales AS s
INNER JOIN products AS p ON p.product_id = s.product_id
INNER JOIN customers AS c ON c.customer_id = s.customer_id
WHERE p.product_id = '1';

要实现这一点,您可以参考Complex SQL query into Zend查看我如何将其转换为Zend_Db查询或仅使用类似

的内容
$select = $this->select()->setIntegrityCheck(false);
$select->from(array('s'=>'sales'), array('date_of_sale'));
$select->join(array('p'=>'products'), 'p.product_id = s.product_id', '*');
$select->join(array('c'=>'customers'), 'c.customer_id = s.customer_id', '*');
$select->where('p.product_id = '.$productId);

显然,引用where子句更好,但我太懒了。

希望这有帮助!