SUM-запрос в cakephp 3 не работает

Я пытаюсь добавить данные того же поля и хочу вернуть результат, я использовал следующий запрос:

$total = $this->Details->find('all', array(
    'fields' => array('sum(Details.total_downtime+ Details.total_downtime)'), 
    'conditions' => array('Details.site_id' => $id)
));    
print_r($total->toArray());
exit;

И я получаю следующий результат:

Array ( 
    [0] => App\Model\Entity\Detail Object ( 
        [displayField] => username 
        [_accessible:protected] => Array ( 
            [*] => 1 
            [id] => 1 
            [site_id] => 1 
            [uptime] => 1 
            [downtime] => 1 
        ) 
        [_properties:protected] => Array ( 
             [sum(Details] => Array ( [total_downtime+ Details] => 4 ) 
        ) 
        [_original:protected] => Array ( ) 
        [_hidden:protected] => Array ( ) 
        [_virtual:protected] => Array ( ) 
        [_className:protected] => App\Model\Entity\Detail [_dirty:protected] => Array ( ) 
        [_new:protected] => 
        [_errors:protected] => Array ( ) 
        [_registryAlias:protected] => Details 
    ) 
)

Где я могу найти свой sum?


person Rishu    schedule 21.12.2015    source источник
comment
Это дает двойной результат, почему?   -  person Rishu    schedule 21.12.2015
comment
Пожалуйста, используйте debug() вместо print_r(), это даст вам более подходящий результат. Попробуйте выполнить sum(Details.total_downtime+ Details.total_downtime) as my_sum, а затем получить доступ к $total->toArray()[0]['my_sum'].   -  person Holt    schedule 21.12.2015
comment
Вам не приходило в голову, что вам, возможно, придется использовать здесь другой синтаксис, чем в 2.x? func()->sum() и т. д., скорее всего, см. документацию.   -  person mark    schedule 21.12.2015


Ответы (3)


Я думаю, вы пытаетесь достичь чего-то подобного?

$query = $Details->find(); 
$query
    ->select(['sum' => $query->func()->sum('Details.total_downtime')])
    ->where(['Details.site_id' => $id])
    ->toArray();
person makallio85    schedule 27.12.2015

Вы можете сделать этот объект collection, как показано ниже:

$Details = $this->Details->find();
$Details = $Details->where(['Details.site_id' => $id]);
$sumOftotal_downtime =  $Details->sumOf('Details.total_downtime');

Справочник по поваренной книге

person Faisal    schedule 13.02.2017

Попробуй это:

$Details = this->Details->find()->select(['sum'=>'SUM(Details.total_downtime)'])->where(['Details.site_id' => $id])->toArray();
person user7329706    schedule 08.09.2020