2013-03-22 52 views
4

經過幾次將可容忍行爲添加到我的各種模型類後,我有一個很好的想法,只需將該行代入AppModel,從而使每個模型都可以包含。這就讓我想知道,有沒有什麼情況下,某種特定的模型具有可控行爲是不可取的或者適得其反的呢?何時不在CakePhp 2.x中使用可容忍的行爲

回答

6

我會說太少不用擔心。我在應用模型把中可容納:

class AppModel extends Model { 
    public $recursive = -1; 
    public $actsAs = array('Containable'); 

} 

遞歸中容納覆蓋,所以你並不真的需要設置遞歸爲-1,但我只是爲了清楚起見做。始終使用可控制的力量,使您始終只使用自己想要/需要的最佳做法。對於小應用程序來說,使用遞歸和忽略可容忍並不是世界末日,但它仍然不是最佳實踐。

所以,我猜想使用遞歸而不是包含的唯一參數是在小應用程序中,您可以節省自己很少的開發時間,並且不會明顯影響性能。我肯定會使用默認情況下使用容易,並刪除它認爲它是過度殺傷,而不是其他方式。

4

可封閉可能是危險的B/C爲了獲得嵌套結果,Cake以非常低效的方式運行。

這個網站解釋得很好...

http://www.endyourif.com/cakephp-containable-statement-pitfalls/

但基本上你是找回了不錯的數組是許多不同的查詢結果,而你的最佳性能可能來自使用單個查詢與聯接。

但是,包容性的便利性無可否認。

+0

好吧,在閱讀您鏈接的文章後,我特別注意到一個聲明: **「在做了一些研究之後,顯然CakePHP在1.2.x中不會解決這個問題。謠言說它將在第2版中得到解決,但我會非常興奮。「** 現在,問題是我到底能夠在官方源代碼中閱讀這些內容?因爲,我懷疑它(關注)仍然存在。看起來很蹩腳的是執行100個'選擇'而不是簡單的'JOIN'。順便說一句,參考2.x文檔和3.x文檔將是很好的。 – Fr0zenFyr 2015-09-14 06:20:30