我正在使用此查询,但它不返回ctotal
。请帮忙。cakephp查询中的sum()函数
$total = $this->RequestedItem->find('all',
[
'sum(cost * quantity) AS ctotal',
'conditions' => [
'RequestedItem.purchase_request_id' => $_GET['po_id']
]
]
);
我正在使用此查询,但它不返回ctotal
。请帮忙。cakephp查询中的sum()函数
$total = $this->RequestedItem->find('all',
[
'sum(cost * quantity) AS ctotal',
'conditions' => [
'RequestedItem.purchase_request_id' => $_GET['po_id']
]
]
);
你不应该直接在CakePHP中使用PHP超全局变量。您应该使用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'])));
领域走在“字段”键,就像条件中的“条件”键去。见http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#find
您可以使用virtualFields:
var $virtualFields = array(
'the_sum' => 'SUM(Model.cost * Model.quantity)'
);
这工作太适合我
$sum = $this->Modelname->find('all', array(
'conditions' => array(
'Modelname.fieldname' => $conditions),
'fields' => array('sum(Modelname.fieldname) as total_sum'
)
)
);
工作得很好暂时将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]个元素。
您可能希望避免直接将$ _GET ['po_id']放入查询中,即使CakePHP正在为您清理用户输入。 – Dave 2011-02-11 16:38:42
@Dave如果CakePHP已经处理注入,有什么危害? – 2011-11-02 14:24:45