функция sum () в запросе cakephp - PullRequest
6 голосов
/ 11 февраля 2011

Я использую этот запрос, но он не возвращает ctotal.Пожалуйста, помогите.

$total = $this->RequestedItem->find('all',
    [
        'sum(cost * quantity) AS ctotal', 
        'conditions' => [
            'RequestedItem.purchase_request_id' => $_GET['po_id']
         ]
     ]
);

Ответы [ 4 ]

14 голосов
/ 11 февраля 2011

Вы не должны использовать суперглобальные переменные PHP непосредственно в CakePHP. Вместо этого следует использовать Model.field наименование, чтобы не допустить неоднозначных ошибок в полях.

Виртуальные поля - это путь, но это не ваша проблема, вам нужно прочитать книгу еще немного.

$total = $this->RequestedItem->find('all', array(array('fields' => array('sum(Model.cost * Model.quantity)   AS ctotal'), 'conditions'=>array('RequestedItem.purchase_request_id'=>$this->params['named']['po_id'])));

должно работать нормально, с virtualFields это будет

var $virtualFields = array('total' => 'SUM(Model.cost * Model.quantity)');
$total = $this->RequestedItem->find('all', array(array('fields' => array('total'), 'conditions'=>array('RequestedItem.purchase_request_id'=>$this->params['named']['po_id'])));

Поля вводятся с помощью клавиши «fields», так же, как условия вводятся с помощью клавиши «условия». Смотри http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#find

8 голосов
/ 01 февраля 2013

Это тоже работает, у меня нормально работало

    $sum = $this->Modelname->find('all', array(
    'conditions' => array(
    'Modelname.fieldname' => $conditions),
    'fields' => array('sum(Modelname.fieldname) as total_sum'
            )
        )
    );
3 голосов
/ 05 марта 2013

Временно установите virtualFields до выполнения поиска.

$this->MaterialScan->virtualFields = array(
    'total_qty' => 'COUNT(MaterialScan.id)',
    'total_lbs' => 'SUM(MaterialScan.weight)'
);
$materialScans = $this->MaterialScan->find('all',array(
    'conditions' => array(
        'MaterialScan.id' => $scans
    ),
    'group' => array('MaterialScan.part_number')
));

Это позволяет избежать наличия элементов [0] в возвращаемом массиве.

2 голосов
/ 11 февраля 2011

Вы можете использовать virtualFields:

var $virtualFields = array(
    'the_sum' => 'SUM(Model.cost * Model.quantity)'
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...