使用CodeIgniter中的Active Record进行更新

时间:2011-10-02 12:31:13

标签: php activerecord codeigniter-2

我有一个奇怪的问题,也许我只是不明白Active Record如何运作得很好,但现在就是这样。我正在尝试更新具有特定ID的记录。为了简单和测试,我只是直接提供id而不是变量。

现在,如果我已经正确理解了Active Record,它似乎与我在Asp.Net中使用的实体框架ORM的工作方式非常不同。但据我所知,您可以先在一行中选择记录,然后在下一行中运行更新时,将更新该特定记录。至少这是它在文档中的样子。以下是文档中的示例:

$data = array(
               'title' => $title,
               'name' => $name,
               'date' => $date
            );

$this->db->where('id', $id);
$this->db->update('mytable', $data); 

所以我尝试在我的代码中做同样的事情:

        $updateData = array(
           'description' => 'My localhost'
        );

        $this->myDb->where('id', 2832);
        $this->db->update('Users', $updateData);

嗯,这根本没有预期的效果!它确实更新了数据库,但它更新了每一条记录,以便所有记录都将描述字段更新为“我的本地主机”!好的我还在使用测试数据库...

我在文档中看到,通过在update语句中提供id,还有另一种方法:

$this->db->update('Users', $updateData, array('id' => 2832));

这很好,很棒。但是......我仍然想知道为什么第一种选择不起作用,因为如果我不理解这一点,我可能会在数据库中犯下其他毁灭性的错误......

我真的很感激有关它是如何工作的澄清,以及为什么所有记录都得到了更新。

1 个答案:

答案 0 :(得分:4)

$updateData = array(
    'description' => 'My localhost'
);

$this->myDb->where('id', 2832);
$this->db->update('Users', $updateData);

这不起作用,因为您将“where”子句应用于$this->myDb,然后在$this->db上调用update。由于对$this->db没有限制,所有记录都会更新。

将其更改为:

$this->db->where('id', 2832);
$this->db->update('Users', $updateData);