【发布时间】:2015-07-20 21:08:27
【问题描述】:
我正在尝试在每次更新“tickets”表后更新“ticketHistory”表。我设置了以下触发器,以便在我的“票证”表更新时运行(通常是在编辑字段时):
TRIGGER `ticket_edit` AFTER UPDATE ON `tickets` FOR EACH ROW INSERT INTO ticketHistory
(ticketId, action, originator, assigned, date)
VALUES
(NEW.ticketId, "Edited", NEW.userId, NEW.assigned, NEW.lastUpdated);
每当在我的应用程序中完成更新时,正在编辑的字段以及“lastUpdated”时间都会更新。我认为因为正在更新两个字段,所以它运行了两次触发器,导致两个相同的行被插入到我的“ticketHistory”表中。我只想插入一行。
有没有办法将其限制为仅插入一行?任何帮助是极大的赞赏!
编辑
所有数据库插入和更新都使用 CodeIgniter 的 ActiveRecord 完成。
我的模特:
public function editTicket($ticket)
{
$q = $this->db->where('ticketId', $ticket['ticketId']);
$q = $this->db->update('tickets', $ticket);
$results = $this->db->affected_rows();
}
我的控制器:
public function edit_ticket()
{
$ticketId = $this->uri->segment(3);
$description = str_replace("\n", "\r", $this->input->post('description'));
$ticket = array(
'ticketId' => $ticketId,
'headline' => $this->input->post('headline'),
'description' => $description,
'priority' => $this->input->post('priority'),
'category' => $this->input->post('category'),
'lastUpdated' => date("Y-m-d H:i:s", time())
);
$this->tickets->editTicket($ticket);
}
【问题讨论】:
-
在您的代码中未显示,当您更新
tickets时,请在一个语句中而不是两个语句中执行此操作。这应该可以在ticketHistory中解决问题。 -
好吧,为了让事情更混乱,我在更新“票证”时使用 CodeIgniters ActiveRecord 进行更新。这是在两个语句中做的吗?
-
哈哈!我知道,但我别无选择
-
你能把codeigniter AR的代码贴出来吗,也许其中一位大师可以看到明显的
-
编辑 OP 以显示 CodeIgniter 代码
标签: php mysql codeigniter activerecord triggers