我不确定如何使用活动记录或使用手动sql处理此问题。我想要做的是在'联系人'中添加一条记录。具有自动递增ID的表,然后将记录添加到" order"带有相应“联系人”ID的表格。记录身份。
我知道我可以使用$ this-> db-> insert_id()来获取插入的联系人记录的ID,但这只能在使用活动记录时起作用吗?
另外,我可以在一个查询中实现这种类型的插入,还是必须将其拆分为两个?
答案 0 :(得分:3)
$this->db
未引用Active Record。您必须选择使用Active Record,$this->db
只是引用数据库抽象层。
也就是说,您可以在查询之后立即使用$this->db->insert_id()
(Active Record或不是Active Record)来获取其插入ID。
但是为了处理依赖于彼此ID的多个记录,我会切换到InnoDB作为您的表类型(如果您还没有)并使用CodeIgniter的transactions。
以下是一个根据CodeIgniter文档改编的示例:
$this->db->trans_start();
$this->db->query('INSERT INTO table1 VALUES(id,field1,field2)');
$table1_id = $this->db->insert_id();
$this->db->query('INSERT INTO table2 VALUES(id,' . $table1_id . ',field2,field3)');
$this->db->trans_complete();
答案 1 :(得分:1)
根据Codeigniter的说法,$this->db
被命名为“活动记录”[原文如此!],所以你已经用这些术语回答了你自己的问题。否则,您需要通过编写“Active Record”来实际指定您的意思。
在PHP中,Mysqli扩展提供了一次运行多个查询:mysqli::multi_query
Docs。
最后一个插入ID函数也存在于Mysql本身中,可以在任何SQL查询中使用,然后称为LAST_INSERT_ID()
Mysql Docs。
INSERT INTO contact;
INSERT INTO order SET contact_ID = LAST_INSERT_ID();
也许这是您正在寻找的信息。
答案 2 :(得分:0)
其他信息
不要忘记检查交易是否成功:
$this->db->trans_complete();
if($this->db->trans_status() === FALSE){// Check Transaction Result successful
echo "<br>------- INFO WAS >>>>>>> NOT INSERTED <<<<<<< -------<br>";
}else{
echo "<br>------- >>>>>>> TRANSACTION SUCCESSFUL <<<<<<< -------<br>";
}