CakePHP:将值发送到模型函数

时间:2013-01-07 01:01:12

标签: cakephp user-defined-functions cakephp-2.2

我的想法是这样的。我在这样的模型中创建了一个函数。

public function status($id = null)
{
$conditions = array('Transaction.catalogue_id' => $id);
$status = $this->find('first',array('conditions' => $conditions, 'fields' => array('Transaction.status'),'order' => array('Transaction.id' => 'desc'))
  );
return $status['Transaction']['status'];
}

我如何从此循环中发送$ id的值?

<table cellspacing="0" cellpadding="0" border="0" class="all">
      <thead>
      <tr>
          <th>No</th>
          <th>Title</th>
          <th>Author</th>
          <th>ISBN</th>
          <th>Location</th>
          <th>Availability</th>
      </tr>
      </thead>
      <?php $count = 1;?>
      <tbody>  
      <?php foreach ($Catalogue as $Catalogue): ?>
      <tr>
          <td><?php echo $count++; ?></td>
          <td><?php echo $this->Html->link($Catalogue['Catalogue']['title'],array('controller' => 'transactions', 'action' => 'view',$Catalogue['Catalogue']['id']),array('escape' => false, 'class' => 'ajax')); ?></td>
          <td><?php echo $Catalogue['Catalogue']['author']; ?></td>
          <td><?php echo $Catalogue['Catalogue']['isbn']; ?></td>
          <td><?php echo $Catalogue['Location']['rack']; ?></td>
          <td><?php echo $this->getstatus($Catalogue['Catalogue']['id'])</td>
      </tr>
      <?php endforeach; ?>
      </tbody>
      <?php unset($Catalogue); ?>
  </table>

我们可以做$ this-&gt; getstatus($ Catalog ['Catalog'] ['id'])?

3 个答案:

答案 0 :(得分:0)

误解了这个问题道歉: 是的,您可以使用requestAction从视图页面访问功能(内部控制器)       $这 - &GT; requestAction('controllerName / actionName /'.$参数);

所以在你的情况下:

 $this->requestAction('status/' .$Catalogue['Catalogue']['id']);

==========================================

我会留下我原来的(错误的)答案,因为它在某些方面有用:)

您需要在控制器中设置值,以便在视图页面上调用它。

 $this->set('status', $status);

然后在您的视图页面上,您可以使用      echo $ status

虽然您在示例中不需要它,但您也可以使用CakePHP的copmact函数,允许您创建多个变量。      $这 - &gt;设置(紧凑( 'VAR1', 'VAR2', 'VAR5')); 将全部视为:

 echo $var1.$var2.$var3;

答案 1 :(得分:0)

您应该在CakePHP中使用Model来定义Catalog和Transaction之间的关系。虽然您尝试的是可能的,但它需要的努力比它需要的多得多。一两行代码(假设您正确地键入了表格)和Cake将为您完成剩下的工作。很整洁,是吗?是。

在Catalogue.php模型文件中,使用Transaction定义hasOne关系。使用ORDER获取最新记录......

class Catalogue extends AppModel {
    public $name = 'Catalogue';

    public $hasOne = array(
       'Transaction' => array(
           'className'    => 'Transaction'
           'order'        => 'Transaction.id DESC'
       )
    );
}

然后在您看来,而不是

<td><?php echo $Catalogue['Catalogue']['id'];?></td>

只是做

<td><?php echo $Catalogue['Transaction']['status'];?></td>

您可以在manual here中了解有关CakePHP中关系的更多信息。

答案 2 :(得分:0)

您可以将模型作为变量传递给视图,如下所示:

public function action() {
    ...
    $this->set('Catalogue', $this->Catalogue);
} 

然后在您看来,您可以这样做:

<td><?php echo $Catalogue->getstatus($catalogue['Catalogue']['id'])?></td>

但你应该在模特身上做这件事。试图获取整个项目列表及其状态。