Nette\Database – MySQL transakcia
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- ricco24
- Člen | 141
Aktuálne už asi hodinu riešim primitívny probélm no neviem sa z neho vysomáriť. V kóde spúštam transakciu no správa sa to tak ako by sa žiadna transakcia nespustila.
Pri získavaní $project_id mi lastInsertId() vždy vráti 0. V tom prípade mi v nasledovnom inserte db vyhodí chybu no projekt sa mi do prvej tabuľky aj tak zapíše …
Taktiež neviem ako prinútim Nette aby mi chybu pri db dotaze odchytila ladenka. Ak operácie neobalím do try / catch bloku tak mi chybu ladenka zachití no po obalení nie …
Využívam verziu Nette 2.0 pre PHP 5.2 s prefixami.
try {
if(!$error) {
$this->model('Project')->getDBConnection()->exec('begin');
$values['user_id'] = '1'; //TODO actual loged user id - ldap
$values = $this->unsetEmpty($values);
$faculty_institute = $values['faculty_institute'];
unset($values['faculty_institute']);
$this->model('Project')->getTable()->insert($values);
$project_id = $this->model('Project')->getDBConnection()->lastInsertId();
foreach($faculty_institute as $key => $value) {
$explode = explode('-', $value);
$pair['project_id'] = $project_id;
$pair['institute_id'] = $explode[1];
$this->model('Project_x_institute')->getTable()->insert($pair);
}
$this->model('Project')->getDBConnection()->exec('commit');
$this->flashMessage('Projekt bol úspešne vytvorený.', 'ok');
$this->redirect('this');
}
} catch (PDOException $e) {
$this->model('Project')->getDBConnection()->exec('rollback');
NDebugger::log($e, NDebugger::ERROR);
$this->flashMessage('Projekt sa nepodarilo vytvoriť.', 'error');
$this->redirect('this');
}