Silverstripe 3个表(1个链接表)ORM实现
我有三个数据库表 表名列 1 id1,第1列 2 id2,第2列 3 id1、id2(来自表1和表2) 因此,如果表1有column1行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和
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'
);
/* .... */
}
另见: