2013-02-24 63 views
0

我有三張桌子(實際上還有幾張桌子,但我只需要三張這個問題)。應用程序,Appattrs和Appcats。用CakePHP的說法(盡我所能,因爲我還在學習框架)應用程序有許多Appattrs和Appattrs屬於應用程序。簡單。基於字段值的CakePHP模型關聯?

當我想要關聯Appattrs和Appcat時,問題出現了 - 該關聯是基於Appattrs中的字段值和相應的外鍵預測的。例如:

如果appattrs.type ='appcatid',則appattrs.value將指向Appcat表中的記錄。

appattrs表保存靜態數據appattrs.type ='dateadded'和value ='201201011300'以及外鍵引用。我不想討論爲什麼數據是以這種方式存儲的,我只想弄清楚如何創建關聯關係,這些關聯關係可以讓我拉取應用程序記錄,關聯的attr記錄,然後是關聯的行的attr記錄從適當的表中。動態。

在我看來,我應該能夠創建一個基於查詢模型,然後關聯該模型 - 我似乎無法弄清楚如何做到這一點。

-

如果我需要發佈架構的三個表,我可以。我也可以發佈我目前的模型代碼,但說實話,現在它只是關聯變量,所以我不認爲它會讓任何人在任何地方。

回答

1

我不明白這個設計背後的邏輯,我的東西你在找什麼 是Creating and Destroying associations on the fly

在CakePHP Docs的這一節中,它描述瞭如何從相應的控制器中關聯模型。

因此,例如,當您想要將特定數據保存到Appattr模型時,您可以使用bind()方法進行一些數據檢查並創建關聯。

一個很抽象的方法上面會是這樣的

public function yourmethod() { 
    ... 
    if ($this->request->data['Appattr']['type'] == 'sometype') { 
     $this->Appattr->bindModel(
       array(/*Your association*/ => array(/* Your attributes...*/) 
     ); 
     /* Rest of the logic follows */ 
    } 
} 

這樣,你得到你的工作做,但它很可能最終會在你的數據庫非常複雜 數據,並因此具有非常複雜的代碼。

我希望這有助於

+0

有點掙扎後,我最終清盤使用bindModel在飛行中創建關聯 - 儘管你的答案並沒有明確回答我的問題是讓我在正確的方向前進。 – 2013-02-25 17:04:47