我正在使用这个查询,但它没有返回ctotal。请帮助。
ctotal
$total = $this->RequestedItem->find('all', [ 'sum(cost * quantity) AS ctotal', 'conditions' => [ 'RequestedItem.purchase_request_id' => $_GET['po_id'] ] ] );
mccptt671#
你不应该在CakePHP中直接使用PHP超全局变量。你应该使用Model.field命名,这样你就不会得到不明确的字段错误。虚拟领域是要走的路,但这不是你的问题,你需要多读一些这本书。
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”键中,就像条件放在“conditions”键中一样。http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#find
8cdiaqws2#
这个也行,对我来说很好
$sum = $this->Modelname->find('all', array( 'conditions' => array( 'Modelname.fieldname' => $conditions), 'fields' => array('sum(Modelname.fieldname) as total_sum' ) ) );
ghhaqwfi3#
在执行查找之前临时设置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]个元素。
sycxhyv74#
你可以使用virtualFields:
var $virtualFields = array( 'the_sum' => 'SUM(Model.cost * Model.quantity)' );
pokxtpni5#
这对我来说很有效。CakePHP在其他常用的SQL函数中有一个sum()函数。请参阅文档中的更多信息:使用SQL函数我没有使用find('all'),而是通过Salines' answer to this linked question实现了我的解决方案。我还用$this->params['named']['po_id']]替换了你使用的PHP超全局变量。供参考,我使用的是CakePHP3。
sum()
find('all')
$this->params['named']['po_id']]
$total = $this->RequestedItem->find(); $total->select([ 'RequestedItem.purchase_request_id', 'ctotal' => $total->func()->sum('cost * quantity') ]) ->where(['RequestedItem.purchase_request_id' => $this->params['named']['po_id']]);
5条答案
按热度按时间mccptt671#
你不应该在CakePHP中直接使用PHP超全局变量。你应该使用
Model.field
命名,这样你就不会得到不明确的字段错误。虚拟领域是要走的路,但这不是你的问题,你需要多读一些这本书。
应该工作正常,与virtualFields它会
字段放在“fields”键中,就像条件放在“conditions”键中一样。http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#find
8cdiaqws2#
这个也行,对我来说很好
ghhaqwfi3#
在执行查找之前临时设置virtualFields。
这避免了在返回的数组中有[0]个元素。
sycxhyv74#
你可以使用virtualFields:
pokxtpni5#
这对我来说很有效。CakePHP在其他常用的SQL函数中有一个
sum()
函数。请参阅文档中的更多信息:使用SQL函数我没有使用
find('all')
,而是通过Salines' answer to this linked question实现了我的解决方案。我还用$this->params['named']['po_id']]
替换了你使用的PHP超全局变量。供参考,我使用的是CakePHP3。