从表中删除多个选定的项目

时间:2012-06-21 13:58:35

标签: cakephp checkbox controller

在我的表中,我有一个列,每行都有一个复选框。我希望能够删除所有选定的项目。我找到了这个网站的代码,并根据我自己的东西进行了修改。 Link

我按照网站的复选框命名约定进行操作,如下所示:

<td>  <?php echo $this->Form->checkbox('LocalClocks.id.['.$LocalClock['LocalClock']['id'].']', array('value' => $LocalClock['LocalClock']['id'])); ?></td>

这是我的控制器中deleteSelected()函数的代码:

    public function deleteSelected()
    {
        foreach($this->data['LocalClocks'] as $key => $value)
        {
            if($value != 0)
            {
                $this->LocalClock->del($value);
            }
        }
        $this->redirect($this->referer());
    }

这是实际删除按钮的代码(以防万一需要):

<?php echo $this->Form->postLink('Delete Selected', array('action' => 'deleteSelected'), array('confirm' => 'Are you sure?')); ?>

我认为可能存在一些问题:

  1. 该代码是为旧版本的蛋糕编写的,我认为该网站说1.3,但我不知道在现有代码中更新/更正的内容是为了使其工作。
  2. 删除按钮与博客教程中cakephp网站上的删除按钮相同。我做的唯一更改是删除要删除的项目的ID,因为我不删除单个项目而是删除多个项目。
  3. 任何帮助都会很棒。

2 个答案:

答案 0 :(得分:5)

您的复选框输入应该是这样的

echo $this->Form->checkbox('LocalClocks.'.$LocalClock['LocalClock']['id'], array(
  'value' => $LocalClock['LocalClock']['id'],
  'hiddenField' => false
));

这将创建一个看起来像这样的数据数组

array(
  'LocalClocks' => array(
    1 => 1,
    42 => 1
  )
);

并且将省略数据数组中任何未经检查的,因为我们没有使用隐藏字段。最后,只需对您的操作进行一些更改

public function deleteSelected()
{
    foreach($this->request->data['LocalClocks'] as $key => $value)
    {
       $this->LocalClock->delete($key);
    }
    $this->redirect($this->referer());
}

我更喜欢将Model::delete()用于Model::deleteAll(),因为它会运行回调,deleteAll则不会。

最后,您的链接实际上是一个提交按钮。这会将数据发布到控制器。

echo $this->Form->end('Submit');

如果您想使用ajax,请使用JsHelper代替提交。以下内容创建了一个Ajax提交,它使用操作的结果更新dom元素#mytable(在这种情况下是您重定向到的引用)。

echo $this->Js->submit('Submit', array(
  'update' => '#mytable'
));
echo $this->Form->end();

答案 1 :(得分:3)

一旦你拿到了复选框的清单;而不是使用foreach循环逐个删除你的ID试试这个:

$this->Model->deleteAll(array('Model.column' => array($keys)));