2012-12-20 54 views
0

我對這個CakePHP模型/控制器開發很困難。CakePHP中的扭曲關係

我有產品型號。該模型有許多定價,圖片,視頻,內容標籤等。

該模型還需要與其他產品有很多關係。 - 例如。配件,工具包,子產品(父母的不同型號)

因此,我創建了一個products_products表,其中我有一個product_id和一個related_id - 相關附件/套件或子產品的ID - 加上關係類型。

表是這樣的:ID,PRODUCT_ID,related_id,類型排序...

我的挑戰是這樣的 - 當我打開一個主打產品,我想所有的產品相關的模型數據,它是相關的 - 所以,對待相關模型就像它是它自己的產品(它是)並加載所有相關的模型數據

我可以使用HABTM關係很容易地從相關表中加載數據..但只是知道產品是相關的不給我它的產品模型數據 - 定價,視頻,圖片,促銷等等。

那麼開發和加載此模型的最佳方法是什麼?我可以使用標準的關聯模型關係來做到嗎,還是需要使用主要產品模型來獲取我的相關項目:使用子查詢(這看起來非常不像蛋糕)使用相關products_products表中的產品ID列表(看起來非常不像蛋糕)

?我會感謝來自有經驗的蛋糕傢伙的任何意見。

在此先感謝。

回答

0

通過使用self associations,您可以節省很多頭痛。

本質上,您需要在您的產品模型中創建一個parent_id字段,並且具有附件等的產品將在parent_id字段中具有主要產品的id。這將簡化將產品從數據庫中取出,因爲您只需調用find('threaded')即可。

從那裏,可以很容易地建立擁有關於產品的視頻/圖像數據的表的許多關係。

+0

是的,我聽到你在說什麼......但我需要指定與關係有關的字段,比如關係的類型(子產品,配件,在同一產品的「家庭」中),再加上諸如排序爲了反對產品關係...... HABTM表似乎是最好的方式,除非你能想到更好的東西嗎? – tremendusapps

+0

如果我正確地理解了你的話,有兩種方法可以解決這個問題:第一,正如你所提到的,與HABTM表;然而,他們是難以置信的笨重,通常比他們的價值更麻煩。另一種方法是有一個名爲「isAn」或類似的地方,你可以存儲它是什麼(例如iphone_case isAn配件)。 – ahjohnston25