Silverstripe 3个表(1个链接表)ORM实现

Silverstripe 3个表(1个链接表)ORM实现,orm,silverstripe,Orm,Silverstripe,我有三个数据库表 表名列 1 id1,第1列 2 id2,第2列 3 id1、id2(来自表1和表2) 因此,如果表1有column1行 row 1 = a row 2 = b row 3 = c 表2有第2列 第4行=d 第5行=e 那么如果表3有行 1 4 = a, d columns 1 5 = a, e columns 3 4 = c, d columns 1 5 = a, e columns 这意味着表3的pk1和pk2将分别从表1和表2中获得column1和

我有三个数据库表

表名列 1 id1,第1列 2 id2,第2列 3 id1、id2(来自表1和表2)

因此,如果表1有column1行

row 1 = a 
row 2 = b 
row 3 = c 
表2有第2列

第4行=d 第5行=e

那么如果表3有行

1 4   = a, d columns
1 5   = a, e columns
3 4   = c, d columns
1 5   = a, e columns
这意味着表3的pk1和pk2将分别从表1和表2中获得column1和column2


问题是如何使用Silverstripe的ORM实现这一点?

您不需要为Silverstripe中的多对多关系创建连接表。那真的很酷。您可以在一侧使用
$many\u many
定义类关系,在另一侧使用
$properties\u many
。如果您需要连接表中的一些自定义字段(例如用于自定义排序),您可以定义
$many\u many\u extraFields

例如:

class Student extends DataObject {
    private static $db = array(//your stuff here);
    private static $many_many = array(
        'Classes' => 'SchoolClass' // naming it "Class" won't work...
    );
    private static $many_many_extraFields = array(
        'SortOrder => 'Int'
    );
/* .... */
}

class SchoolClass extends DataObject {
    private static $db = array(//your stuff here);
    private static $belongs_many_many = array(
        'Students' => 'Student' 
    );

/* .... */
}
另见:


一所学校包括两个群体:学生和班级。一个学生可以参加多个班级,一个班级可以容纳多个学生。因此,学生和班级之间存在着“多对多”的关系。如何使用Silverstripe的ORM连接表将这两个组关联起来?第二个类应该是“class SchoolClass Extendes DataObject”吗?