我有一个奇怪的问题,也许我只是不明白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));
这很好,很棒。但是......我仍然想知道为什么第一种选择不起作用,因为如果我不理解这一点,我可能会在数据库中犯下其他毁灭性的错误......
我真的很感激有关它是如何工作的澄清,以及为什么所有记录都得到了更新。
答案 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);