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