在 Silverstripe 模型中查询远程表

发布于 2024-12-07 11:59:34 字数 548 浏览 0 评论 0原文

我试图从另一种页面类型的页面类型中获取字段“成本”的总和。 (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 位做什么?我怎样才能获得该类别的总成本? (如果我将 where 留空,它将返回每个类别的所有项目成本的总和 - 这不好)。

I'm trying to get a sum of a field "cost" from a page type from another page type. (ProjectCategory), like this:

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;
}

What do I do for the where bit? How can I get the sum of cost for just this Category? (If I leave the where blank it returns the sum of all project costs for every category - which is no good).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

吃→可爱长大的 2024-12-14 11:59:34

“where”部分应该是:

"ID = " . $this->RelateToProjectID

哦,等等,上面的内容仅适用于 $has_one,但您使用的是 Many_many 关系。

以下应该可以解决您的 Many_many 关系:

构建相关项目的 ID 数组:

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

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

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

the "where" part should be:

"ID = " . $this->RelateToProjectID

oh, wait, the above will only work für $has_one, but you're using a many_many relationship.

the following should do the trick for your many_many relationship:

build an array of IDs of related projects:

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

then use them in your 'where' statement like so:

"ID IN (" . join(',',$projectIDs) . ")"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文