在Silverstripe模型中查询远处的桌子

时间:2011-09-30 07:51:43

标签: silverstripe

我正在尝试从其他网页类型的网页类型中获取字段“费用”的总和。 (ProjectCategory),像这样:

class ProjectCategory  extends Page {
 static $belongs_many_many = array( 
  'RelateToProject' => 'Project' 
); 

function totalCost(){
    $sqlQuery = new SQLQuery( 
     "SUM(Project.cost)", // Select 
     "Project", // From 
    "what to do here?" // Where (optional) 
    ); 
    $totalVisits = $sqlQuery->execute()->value();

    return $totalVisits;
}

我该怎么办?如何获得此类别的成本总和? (如果我将where留空,则返回每个类别的所有项目成本的总和 - 这是不好的。

1 个答案:

答案 0 :(得分:1)

“where”部分应该是:

"ID = " . $this->RelateToProjectID

哦,等等,上面的内容只适用于$ has_one,但你使用的是很多关系。

以下内容应该为你们多人关系提供诀窍:

构建相关项目的ID数组:

$projects = $this->RelateToProject();
$projectIDs = array();
if($projects) {
  foreach($projects as $project) {
    $projectIDs[] = $project->ID;
  }
}

然后在'where'语句中使用它们,如下所示:

"ID IN (" . join(',',$projectIDs) . ")"