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');
}