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
+
0
-

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');
}
Caine
Člen | 216
+
0
-

U pdo se transakce spousti $this->model(‚Project‘)->getDBConnection()->beginTransaction(), stejne tak
->commit() a ->rollBack()…

ricco24
Člen | 141
+
0
-

Vďaka, ja blbec som si pri každom volaní $this->model(‚xxx‘) vytváral novú instanciu objektu takže mi transakcia nemohla fungovať. Keďže tá sa vykonáva nad jednou instanciou.