2012-08-22 71 views
0

我只是想知道是否有可能在同一個類上有多個many_many關係。例如,我有一個表A,表B和表C.我希望表A和表B之間的many_many關係以及表A和表C之間的另一個many_many關係。我試過這個,但它沒有將ID添加到它創建的表格。我做了一些搜索,發現這個http://www.balbuss.com/multiple-many-many-s-of-the-same-class/,我不確定現在是否有可能。Silverstripe中的多個many_many關係

任何幫助,非常感謝。

我想過使用onAfterWrite填充鏈接表,但我應該這樣做嗎?

class Table B extends DateObject { 
static $belongs_many_many = array (
    'TableAs' => 'TableA' 
); 
} 

class Table C extends DateObject { 
static $belongs_many_many = array (
    'TableAs' => 'TableA' 
); 
} 

class Table A extends Page { 
    static $many_many = array (
    'TableB' => 'TableB', 
    'TableC' => 'TableC' 
); 
} 
+0

不,onAfterWrite聽起來不正確的方式來解決這個問題。 請問您可以添加您當前的代碼嗎? – Zauberfisch

+0

感謝您對@Zauberfisch的迴應。我已經添加了上面的代碼,它涉及到many_many關係。 – MillyMonster

+0

這種關係當然有可能,我自己有很多情況下,我的關係看起來就像你的。 所以你說關係沒有保存?你還可以發佈你如何保存關係的代碼?你用什麼來管理關係? – Zauberfisch

回答

1

用於管理SilverStripe您可以使用下列領域many_many關係:

ss2.4:ManyManyComplexTableFieldManyManyDataObjectManager,都提供該類型的所有記錄的列表,讓您選擇的關係複選框

ss3.0:GridField,但你可能需要添加的複選框你的自我,不知道

此外,在2.4和3.0也有一些下拉領域和其他領域的日在支持many_many關係以及(例如TreeMultiselectField


我不知道你的意思在註釋「通過表A的每個實例重複」,如果你只是想循環被asigned所有TableAs以表B中的一條記錄,那麼你可以這樣做:

foreach ($tableBrecord->TableAs($filter = "", $sort = "", $join = "", $limit = "") as $tableArecord) { 
    // do something with $tableArecord 
} 

但是,如果你真的想這樣做TableA上的所有記錄的東西,那麼你可以這樣做:

foreach(DataObject::get('TableA', $filter = "", $sort = "", $join = "", $limit = "") as $tableArecord) { 
    // do something with $tableArecord 
} 

如果y你有很多TableA記錄這可能會有點慢,所以你也可以做一個本地查詢,如

DB::query('UPDATE TableA SET ...'); 
+0

對不起,我並不清楚@Zauberfisch。第二種選擇似乎是我想要的。我正在嘗試這樣的事情。 $ Tables = DataObject :: get(「TableA」),因爲這條線以前工作。我想將每個商店的ID添加到鏈接表以及新創建的表B的ID。 – MillyMonster

+0

你有想過嗎?我不確定你的評論是一個陳述還是一個問題:) – Zauberfisch

+0

沒有我一直在嘗試沒有奏效。我對這個提出的問題表示歉意。我會繼續努力的。感謝您的幫助和耐心。 :) – MillyMonster

相關問題