Silverstripe:遍历many_many || belongs_many_many关系列表

时间:2016-07-26 17:32:47

标签: silverstripe relation

我有两个课程项目开发人员。一个开发人员可以在多个项目中工作,一个项目可以由多个开发人员处理,因此它是一个n-m关系。在我的数据库中有一个表 project_developers ,它是这两个类的映射表。此映射表包括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();

但我不知道,我如何只获得一个特定开发人员的项目。我想过滤特定开发者ID的映射表。

有谁知道?

1 个答案:

答案 0 :(得分:3)

首选方法是让您的开发人员。如果您只有DeveloperID,请先使用它来获取Developer

$developer = Developer::get()->byID($DeveloperID);

然后,您可以轻松地从Projects

获取Developer
$MyDevelopersProjects = $developer->Projects();
foreach( $MyDevelopersProjects as $Project ) {
   ... 
}

还有其他方法可以手动执行此操作,例如在->join(...)后使用->filter(...)Projects::get(),但我不建议使用此路线。

还可以使用DataList::Relation($relationName)来获得结果,但我从来没有使用它们,所以不确定它会如何发展。