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/并且不确定现在是否可能。

很感谢任何形式的帮助。

我曾想过使用 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'
);
}
4

1 回答 1

1

要在 SilverStripe 中管理 many_many 关系,您可以使用以下字段:

ss2.4:ManyManyComplexTableFieldManyManyDataObjectManager,都提供该类型所有记录的列表,并让您选择与复选框的关系

ss3.0: GridField,但您可能必须自己添加复选框,不确定

此外,在 2.4 和 3.0 中,还有一些下拉字段和其他支持 many_many 关系的字段(例如TreeMultiselectField


我不确定评论中“遍历 TableA 的每个实例”是什么意思,如果您只想循环分配给 TableB 的单个记录的所有 TableA,那么您可以执行以下操作:

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
}

如果您有很多 TableA 记录,这可能会有点慢,所以您也可以像这样进行本机查询

 DB::query('UPDATE TableA SET ...');
于 2012-08-22T15:08:00.770 回答