[英]What would be the most efficient way to search 3 tables and their related tables?
[英]Most efficient way to join tables
我在cakePHP中有两个模型,一个是Parts ,另一个是Orders 。
零件是一个简单的模型,具有一个ID列,并包含多个字段,例如客户 , 零件号 , 描述等。每个零件都有其自己的唯一ID。
订单是另一个简单的模型,具有一个名为* part_id *的字段,该字段表示零件模型中的ID。
在一个操作中,我将需要在Orders控制器中提取该特定视图的所有订单,从Parts数据库中找到有关该订单的信息,并将其放到一个数组中以准备传递到该视图。
例如,表可能看起来像:
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个订单,因此我需要一种有效的方法来在“ 零件”数据库中引用每个订单的* part_id *并将其合并为一个数组。 我不确定如何有效实现它多次搜索零件数据库。
注意:我猜解决方案可能是蛋糕或纯PHP。
如果您在订单模型中正确定义了关系,则应该能够检索所有相应的零件
$this->Orders->find('all');
cakephp将在两个查询中执行此操作:-所有订单的SELECT-所有产品的SELECT,其中product.id在(list_of_Orders_ids)中
然后它将以适当的格式构造一个数组
如果需要特殊查询,也可以“手动”设置查询的联接,但需要将递归设置为-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')))))
祝好运!
您可以使用$this->Order->find('all', array('recursive' => 2));
获得(所有)订单的$this->Order->find('all', array('recursive' => 2));
在您的控制器中。 每个订单还包含相关的零件信息。
Imo客户信息应该是订单的一部分,而不是部分。 另外,您可能希望订单包含多个零件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.