【问题标题】:CakePHP : Send Value To Model FunctionCakePHP:向模型函数发送值
【发布时间】:2013-01-07 01:01:12
【问题描述】:

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

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->getstatus($Catalogue['Catalogue']['id']) 吗?

【问题讨论】:

  • PS:这不是很好的编码。您不检查返回值是否实际填充。如果 id 无效,您将触发未定义的索引错误...应该添加 if (!$status) { return false; } 等。

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


【解决方案1】:

误读问题道歉: 是的,您可以使用 requestAction 从视图页面访问功能(控制器内部) $this->requestAction('controllerName/actionName/'.$parameter);

所以在你的情况下:

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

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

我会留下我原来的(错误的)答案,以防它在某种程度上有所帮助:)

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

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

然后在您的查看页面上,您可以使用 回显$状态

虽然您的示例中不需要它,但您也可以使用 CakePHP 的 copmact 函数,允许您创建多个变量。 $this->set(compact('var1','var2','var5')); 都将在视图中变为可用:

 echo $var1.$var2.$var3;

【讨论】:

  • sorry.can you give example of controller.i new in cakephp。我不明白你写的内容
【解决方案2】:

您应该在 CakePHP 中使用您的模型来定义目录和事务之间的关系。尽管您正在尝试的是可能的,但这比需要的努力要多得多。一两行代码(前提是您正确键入了表格),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 中关系的更多信息。

【讨论】:

  • 我想从表事务中获取最新的事务。目录有很多事务
  • hasOne 只会返回一条记录,因此将 ORDER 添加到它以获取最后一条记录,然后就可以了。我已经更新了我的答案以反映这一点。
  • 我试试上面的代码。它显示交易状态。但问题是数据重复。
  • 有一个确切重复的例子吗?
  • 如果一个目录有 3 个事务。它显示了 3 个不同状态的目录详细信息
【解决方案3】:

您可以像这样将模型作为变量传递给视图:

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

那么在你看来你可以这样做:

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

但是您应该在模型上执行此操作。试图获取整个项目列表及其状态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 2012-09-30
    • 1970-01-01
    相关资源
    最近更新 更多