如何获取 Codeigniter 中模型之间事务中关系的最后一个 ID?
Posted
技术标签:
【中文标题】如何获取 Codeigniter 中模型之间事务中关系的最后一个 ID?【英文标题】:How to get last id for relationships in a transaction between models in Codeigniter? 【发布时间】:2014-03-06 09:08:33 【问题描述】:我在用户控制器的一个函数中有这段代码。我正在使用 Codeigniter。
$name_user = $this->input->post('contact-company');
$company_name = $this->input->post('name-company');
$company_orgnr = $this->input->post('orgnr-company');
$phone_company = $this->input->post('phone-company');
$email_company = $this->input->post('email-company');
//Insert a a new user
$user_info = array(
'username' => $email_company,
'name_user' => $name_user
);
$company_info = array(
'name' => $company_name,
'orgnr' => $company_orgnr,
'phone' => $phone_company,
'email' => $email_company
);
//Insert a new user in db
$query_insertuser = "START TRANSACTION";
//Get sql for inserting a new user
$um = new Usermodel();
$query_insertuser .= $um->getSQLInsert($user_info);
//Get sql for inserting a new company
$cm = new Companymodel();
$query_insertuser .= $cm->getSQLInsert($company_info);
//Get sql for inserting relation between user
//and company (How do I get ID of user and ID of company to use?)
$upm = new Userprofilemodel();
$query_insertuser .= $upm->getSQLInsert();
$query_insertuser .= "COMMIT";
//Do the atual insert
$um->insert($query_insertuser);
它用于通过表单处理注册。 (验证通过表单验证库完成)-
用户名,name_user 存储在用户表中 公司存储在公司表中 公司和用户之间的关系存储在一个 用户资料表我认为代码是不言自明的,但我不清楚如何在 userprofile-model 中插入关系。我确实需要最后插入的用户 ID 和最后插入的公司 ID,但在我的代码中我没有,因为在调用 $upm->getSQLInsert();
之前我实际上并没有插入任何用户或公司。
还是我做错了?请给我任何指点...
【问题讨论】:
【参考方案1】:我显然没有正确地这样做。以防有人打扰这是我的解决方案:-)
用户控制器(部分)
//Insert a new user in db
$um = new Usermodel();
$um->startTransaction();
$user_id = $um->insert($user_info);
$cm = new Companymodel();
$company_id = $cm->insert($company_info);
//Insert a new user-profile for newly inserted user
$upm = new Userprofilemodel();
$userprofile_info = array(
'user_id' => $user_id,
'company_id' => $company_id
);
$upm->insert($userprofile_info);
$um->endTransaction();
用户模型(部分)
public function startTransaction()
$this->db->trans_start();
public function endTransaction()
$this->db->trans_complete();
public function insert(array $user_info)
$this->db->insert('user', $user_info);
return $this->db->insert_id();
公司模型(部分)
public function insert(array $company_info)
$this->db->insert('company', $company_info);
return $this->db->insert_id();
Userprofile-model(部分)
public function insert(array $userprofile_info)
$this->db->insert('user_profile', $userprofile_info);
return $this->db->insert_id();
【讨论】:
以上是关于如何获取 Codeigniter 中模型之间事务中关系的最后一个 ID?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 CodeIgniter 中获取/返回最后插入的 id?
如何将结果从模型传递到 CodeIgniter 中的控制器?
无法在 Codeigniter 中从模型获取查询结果到控制器