0

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

产品表

产品 ID、产品名称

客户表

客户 ID,客户名称

销售表

customer_id、product_id、date_of_sale

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

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

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


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

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

任何帮助都会很酷。我希望最终用数据映射器实现替换 zend_table,因为它执行的数据库查询的数量似乎非常低效有了这个。

谢谢。

4

1 回答 1

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';

为了实现这一点,您可以参考复杂 SQL 查询到 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 子句中引用,但我太懒了。

希望这可以帮助 !

于 2013-07-02T13:20:43.840 回答