Silverstripe:多个| | |属于|多个|多关系列表上的循环

Silverstripe:多个| | |属于|多个|多关系列表上的循环,silverstripe,relation,Silverstripe,Relation,我有两门课:项目课和开发者课。一个开发人员可以在多个项目中工作,一个项目可以由多个开发人员处理,因此这是一种n-m关系。在我的数据库中有一个表project\u developers,它是这两个类的映射表。这个映射表包括projectd和developerId <?php class Developer extends Member { private static $belongs_many_many = array( 'Projects' => 'Proj

我有两门课:项目课和开发者课。一个开发人员可以在多个项目中工作,一个项目可以由多个开发人员处理,因此这是一种n-m关系。在我的数据库中有一个表project\u developers,它是这两个类的映射表。这个映射表包括projectd和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'
    );
}
但我不知道,我如何只得到一个特定开发人员的项目。我想筛选特定developerID的映射表


有人知道吗?

首选的方法是让开发人员已经参与进来。如果您只有一个
DeveloperID
,请先使用它让您的
开发人员

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

然后,您可以从
开发人员
轻松获得
项目

$MyDevelopersProjects = $developer->Projects();
foreach( $MyDevelopersProjects as $Project ) {
   ... 
}
手动执行此操作还有其他方法,例如在
Projects::get()
之后使用
->join(…)
->filter(…)
,但我不建议使用此方法


还有一个
DataList::Relation($relationName)
可以用来获得结果,但我从来没有使用过它们,所以我不太确定它将如何运行。

thx AlphaCactus!!现在它起作用了。我很高兴:)几天前我写了$developer->Projects();然后我的IDE告诉我->Projects();突击队没找到,但我没试着逃跑。但是这个突击队是有效的。foreach($developer->Projects()作为$Project)应该作为well@jberculo您知道使用您建议的语法是否会影响性能吗?我以前读过类似count($someArray)的东西可能会很慢,所以我一直认为调用函数会比将其存储在变量中慢,如果调用多次的话。虽然我不太确定。@糟糕的是,IDE是有帮助的,但很多时候我发现IDE并不完全支持像Silverstripe这样的框架使用PHP语言的复杂方式。众所周知,PHP是复杂的。我建议:将IDE警报更多地作为指导原则,而不是事实。@AlphaCactus在这两种情况下,PHP只调用该函数一次,因此它们基本相同
$MyDevelopersProjects = $developer->Projects();
foreach( $MyDevelopersProjects as $Project ) {
   ... 
}