Запрос удаленного стола в модели Silverstripe - PullRequest
0 голосов
/ 30 сентября 2011

Я пытаюсь получить сумму поля "стоимость" из типа страницы из другого типа страницы.(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 пустым, он возвращает сумму всех затрат по проекту для каждой категории - что не годится).

1 Ответ

1 голос
/ 30 сентября 2011

часть "где" должна быть:

"ID = " . $this->RelateToProjectID

о, подождите, вышеописанное будет работать только для $ has_one, но вы используете отношение many_many.

следующееследует выполнить трюк для ваших отношений many_many:

создать массив идентификаторов связанных проектов:

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

, а затем использовать их в своем выражении 'where', например:

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