Как получить последний идентификатор для отношений в транзакции между моделями в Codeigniter?

У меня есть этот код внутри функции в пользовательском контроллере. Я использую 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

Я думаю, что код говорит сам за себя, но мне не ясно, как вставить отношение в модель профиля пользователя. Мне нужен последний вставленный идентификатор для пользователя и последний вставленный идентификатор для компании, но в моем коде у меня этого нет, потому что я фактически не вставляю никаких пользователей или компаний перед вызовом $upm->getSQLInsert();

Или я делаю это неправильно? Пожалуйста, дайте мне какие-либо указатели ...


person bestprogrammerintheworld    schedule 06.03.2014    source источник


Ответы (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();
}

Модель профиля пользователя (часть ее)

public function insert(array $userprofile_info) {
    $this->db->insert('user_profile', $userprofile_info); 
    return $this->db->insert_id();
}
person bestprogrammerintheworld    schedule 06.03.2014