Silverstripe:循环 many_many || belongs_many_many 关系列表

Silverstripe: loop over many_many || belongs_many_many relation list

我有两个 类 ProjectDeveloper。一个开发人员可以在多个项目中工作,一个项目可以由多个开发人员处理,所以这是一个 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) 可以用来得到结果,但我从来没有用过它们,所以不太确定结果如何。