Nette\Database – použití transakce

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
MW
Člen | 615
+
0
-

Zdravim a prosím o radu, jak spravne pouzit transakce.
Tady je kus kodu, pouzil jsem neco podobneho, co jsem zde nasel, ale neprijde me, ze to funguje.

DB je v MyISAM ale tabulky jsou Inno3d. Nemuze to vadit? Je toto pouziti v Nette spravne?

Jde me o zrychleni, davka obsahuje tisice zaznamu.

Predem diky !

Presenter

foreach ($rozpad as $dataV) {


			$dataV->firma = "xxx";
			$dataV->cislo_fa = "xxx";
			$dataV->varsym = "xxx";
			$dataV->castka = "xxx";

			self::$database->beginTransaction();
			$this->saveVynosy($dataV);
			self::$database->commit();

		}

v modelu je pak

public function saveVynosy($values) {
	self::$database->table('vynosy')->insert($values);
    }
Foowie
Člen | 269
+
0
-

Pokud ti jde o zrychlení, tak musíš do transakce dát celý cyklus. Tzn. beginTransaction před foreach a commit po dokončení cyklu.

Editoval Foowie (29. 8. 2012 16:14)

MW
Člen | 615
+
0
-

Ja to zkousel, ale zmena zadna…
Na vterinu stejne…

Napada vas nejaky postup, jak to overit, jestli to vubec vali?

Diky !

Ot@s
Backer | 476
+
0
-

Vyzkoušej vícenásobný insert, viz. např. toto vlákno o vícenasobném insertu ve fóru.

MW
Člen | 615
+
0
-

Vicenasobny insert vypada dobre.. ale nejak tapu, jak to nasroubovat na tento priklad.
Prosim o nakopnuti…

Diky

Ot@s
Backer | 476
+
0
-

Nachystej si data do pole (třeba z CSV, nevím odkud je bereš).

$dataV = array(
	array('firma'=>'xxx', 'cislo_fa'=>'xxx', 'varsym'=>'xxx', 'castka'=>'xxxx'),
	array('firma'=>'xxx', 'cislo_fa'=>'xxx', 'varsym'=>'xxx', 'castka'=>'xxxx'),
	array('firma'=>'xxx', 'cislo_fa'=>'xxx', 'varsym'=>'xxx', 'castka'=>'xxxx')
	// atd...
);
$this->database->exec('INSERT INTO invoice', $dataV); // v příslušné metodě modelu (s param $dataV)