最有效的连接表方式

时间:2011-06-17 15:53:26

标签: php arrays cakephp find

我在cakePHP中有两个模型,一个是零件,另一个是订单

零件是一个简单的模型,其id列加上多个字段,例如 customer part number description 等。每个部分都有它的自己独特的身份。

Orders是另一个简单模型,带有一个名为* part_id *的字段,表示来自Parts模型的id。

在操作中,在订单控制器中,我需要提取该特定视图的所有订单,从部件数据库中查找有关该订单的信息并将其放入一起准备好传递给视图的数组。

例如,表格可能如下所示:

ORDERS

Part_id   id
2         5
1         7

PARTS

customer  partnumber  description    id
Google    XHA-V1      widget_1       1
Yahoo     YVS-XN      widget_5       2

由于我在任何一个视图中都有50-100个订单,因此我需要一种有效的方法来引用 Parts 数据库中的每个订单的* part_id *并将其合并为一个数组。它多次搜索 Parts 数据库,我不确定如何有效实现。

注意:我想解决方案可能是蛋糕或纯PHP。

2 个答案:

答案 0 :(得分:1)

如果您在订单模型中正确定义了关系,则应该能够检索所有相应的零件

$this->Orders->find('all');

cakephp会在两个查询中执行此操作: - 所有订单的SELECT - 对于(list_of_Orders_ids)

中product.id的所有产品的SELECT

然后它将以适当的格式构建一个数组

如果您需要特殊查询,还可以“手动”设置查询的连接,但是您需要将递归设置为-1

$this->Orders->find('all',array('recursive'=>-1,
                                'fields'=>array('Order.*','Part.*'),
                                'joins'=>array(array('table' => 'parts',
                                                     'alias' => 'Part',
                                                     'type' => 'INNER', //or left
                                                     'conditions' => array('Part.id = Order.part_id')))))

祝你好运!

答案 1 :(得分:0)

您可以使用控制器中的$this->Order->find('all', array('recursive' => 2));获取一系列(所有)订单。每个订单还包含相关的零件信息。

Imo客户信息应该是订单的一部分,而不是部分。您也可能希望订单包含多个部件。