2014-09-04 61 views
-1

我正在使用cakephp进行项目开发。我写了一个函数来从数据库中获取数据并进行求和。我创建了一个名为user的表格,其中包含高度和重量。我想检索这些数据,添加它们并返回。这是我写的功能。在Cakephp中编写函数时出错

public function calculate() 
{ 
    $Height=$this->set('user',$this->User->find('first')); 
    $Weight=$this->set('user1',$this->User->find('first')); 
    $sum=($Height+$Weight); 
    $this->set('SUM',$sum); 
} 

在视图中我写了下面的代码。

<div class="page-content"> 
<?php echo $user['User']['weight']; ?> 
<?php echo $user1['User']['height']; ?> 
<?php echo $SUM ?> 
</div 

高度和重量值正在显示。但总和值显示为零。请帮我解决这个问题。

+1

检查您的控制器中的变量高度和重量,它们不是用户模型/表格中的高度和重量,这是您在视图中显示的高度和重量。 – Abhishek 2014-09-04 05:45:25

+0

尝试在计算总和之前将其高度和权重变量转换为int – 2014-09-04 07:32:02

+1

'set()'方法旨在将数据发送到视图,因此它不会返回任何内容。 – dhofstet 2014-09-04 07:36:42

回答

0

我找到了一个更好的方法来做上述计算。我在控制器中使用了以下代码。

public function calculate($id=null) 
    { 
     if (!$this->User->exists($id)) { 
     throw new NotFoundException(__('Invalid user')); 
     } 
     $this->set('user1',$this->User->find('first', array('fields' => ('height'),'conditions' => array('User.id' =>$id)))); 
     $this->set('user',$this->User->find('first', array('fields' => ('weight'),'conditions' => array('User.id' =>$id)))); 
    } 

我的看法与上面提到的类似。这与我工作正常...

+0

您不必使用'find()'两次,只需使用“height”和“width”作为“fields”选项的元素。 – dhofstet 2014-09-05 06:02:23

+0

作为dhofset指出的,你可以在单个数组中添加这两个字段。所以不需要触发find查询两次。它应该是这样的:$ this-> set('user',$ this-> User-> find ( '第一',阵列( '条件'=>数组( 'User.id'=> $ ID) '字段'=>数组( '身高', '体重')))); – Ketan 2014-09-05 19:15:09

0

首先,您需要从查找中获得该字段。 (例如,您可以使用查找条件来过滤de用户标识)。

$user = $this->User->find('first', array(
    'conditions' => array('User.id' => $id), 
    'fields' => array('User.height', 'User.weight') // fields from your DB 
)); 

所以,你可以做一个pr($user)来查看数据并知道什么用。

完成并设置为视图后。 Cakephp Set

+0

感谢它的工作.. – Roshani 2014-09-04 16:12:34

+0

@Roshani在这里说谢谢的方式是upvote或接受答案。如果你认为你的答案更好(即使这是更好的性能方面,它可能导致你的解决方案),然后标记你的,但无论如何,标记一个。 – Nunser 2014-09-10 12:15:26