Silverstripe:循环 many_many || belongs_many_many 关系列表
Silverstripe: loop over many_many || belongs_many_many relation list
我有两个 类 Project 和 Developer。一个开发人员可以在多个项目中工作,一个项目可以由多个开发人员处理,所以这是一个 n-m 关系。在我的数据库中有一个 table project_developers,它是这两个 类 的映射 table。此映射 table 包括 ProjectID 和 DeveloperID。
<?php
class Developer extends Member {
private static $belongs_many_many = array(
'Projects' => 'Project'
);
}
<?php
class Project extends DataObject {
private static $many_many = array(
'Developers' => 'Developer'
);
}
我想显示一个开发者的所有项目。
显示所有项目是这样的:
return Project::get();
但我不知道,我是如何只获得一个特定开发人员的项目的。我想过滤特定 developerID 的映射 table。
有人知道吗?
首选方法是让您的开发人员已经。如果你只有一个 DeveloperID
,先用它来获得你的 Developer
:
$developer = Developer::get()->byID($DeveloperID);
然后你可以很容易地从Developer
得到Projects
:
$MyDevelopersProjects = $developer->Projects();
foreach( $MyDevelopersProjects as $Project ) {
...
}
还有其他方法可以手动执行此操作,例如在 Projects::get()
之后使用 ->join(...)
和 ->filter(...)
,但我不推荐这种方法。
还有 DataList::Relation($relationName)
可以用来得到结果,但我从来没有用过它们,所以不太确定结果如何。
我有两个 类 Project 和 Developer。一个开发人员可以在多个项目中工作,一个项目可以由多个开发人员处理,所以这是一个 n-m 关系。在我的数据库中有一个 table project_developers,它是这两个 类 的映射 table。此映射 table 包括 ProjectID 和 DeveloperID。
<?php
class Developer extends Member {
private static $belongs_many_many = array(
'Projects' => 'Project'
);
}
<?php
class Project extends DataObject {
private static $many_many = array(
'Developers' => 'Developer'
);
}
我想显示一个开发者的所有项目。
显示所有项目是这样的:
return Project::get();
但我不知道,我是如何只获得一个特定开发人员的项目的。我想过滤特定 developerID 的映射 table。
有人知道吗?
首选方法是让您的开发人员已经。如果你只有一个 DeveloperID
,先用它来获得你的 Developer
:
$developer = Developer::get()->byID($DeveloperID);
然后你可以很容易地从Developer
得到Projects
:
$MyDevelopersProjects = $developer->Projects();
foreach( $MyDevelopersProjects as $Project ) {
...
}
还有其他方法可以手动执行此操作,例如在 Projects::get()
之后使用 ->join(...)
和 ->filter(...)
,但我不推荐这种方法。
还有 DataList::Relation($relationName)
可以用来得到结果,但我从来没有用过它们,所以不太确定结果如何。