我正在尝试更新一个' ticketHistory'每次更新我的门票后的表格#39;表。我有以下触发器设置,以便在我的“门票”时运行。表已更新(通常在编辑字段时):
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);
每当我的应用程序中完成更新时,正在编辑的字段都会更新,以及“最后更新”字段。时间。我认为因为两个字段正在更新,它正在运行触发器两次,导致两个相同的行被插入到我的票据历史记录中。表。我只想要插入一行。
有没有办法将它限制为只插入一行?任何帮助是极大的赞赏!
修改
所有数据库插入和更新都是使用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);
}
答案 0 :(得分:1)
public function editTicket($ticket)
{
$q = $this->db->where('ticketId', $ticket['ticketId']);
echo "I am here again<br/>";
$q = $this->db->update('tickets', $ticket);
$results = $this->db->affected_rows();
}
答案 1 :(得分:0)
我不确定为什么要添加2个不同的行,但你可以只创建一个主键字段,而你的DBMS不会允许重复。
希望这有帮助!
答案 2 :(得分:0)
所以,作为解决方案,我修改了我的触发器:
TRIGGER `ticket_edit` AFTER UPDATE ON `tickets`
FOR EACH ROW
IF NEW.headline <> OLD.headline || NEW.description <> OLD.description || NEW.priority <> OLD.priority
THEN
INSERT INTO ticketHistory
(ticketId, action, originator, assigned, date)
VALUES
(NEW.ticketId, "Edited", NEW.userId, NEW.assigned, NEW.lastUpdated);
END IF
通过添加条件,我认为它只激活了一次触发器,导致只插入一行。
希望这有助于某人!