2010-06-30 32 views
0

我有一個相當簡單的數據模型,但我有一箇中心實體稱爲「項目」,它通過1對1/1對多關聯到7個其他實體關係。 一切工作順利。但是在大多數使用項目模型的動作中,我不需要模型項目中的任何關聯 - 所以mysql最終會發出許多不必要的查詢(因爲在「項目」模型類中定義的關聯)。CakePHP模型關聯和他們需要的mysql查詢的數量

我在想什麼是最大限度地減少這些不必要的查詢的最佳方法 我在考慮從模型類中移除所有關聯,使所有模型可包含,並在需要時在運行時創建關聯。

另一種選擇是隻要使用bindModel/unbindModel,只要它有意義。

我不太確定哪種方法更好,如果有另一種更合適的方法來最小化這些不必要的mysql查詢。

任何反饋將是巨大的:)

回答

1

不要使用遞歸。 不要刪除你的關聯。

在app_model.php插件(在類級別):

var $actsAs = array('Containable'); 

然後使用

$this->MyModel->contain(); 

$this->MyModel->contain(array('AssocThing.field','OtherThing.SubThng.field')); 

來控制您檢索的表和字段。

Containable會給你檢索數據的細粒度控制。這就是它的目的!

1

在發出()設置的遞歸屬性設置爲0查找:

$this->Model->recursive = 0; 
+0

但有時我只想要一些關聯。並非都不是。 – azv 2010-06-30 13:40:10

0

我會用unbindModel()第一。然後,我只會在僅使用unbindModel()的控制器或模型中使用Containable behavior。有時僅使用綁定/解除綁定或可容納來最小化查詢數量是不夠的。然後,您可以在find()查詢中使用'joins' option