簡體   English   中英

聯接表的最有效方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM