Jak pouzit lastInsertId()?

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

Zdravim, potreboval bych poradit jak pouzit lastInsertId() u nette ORM. Prikaz pro insert mam $db->query(‚INSERT INTO table‘, $arr). LastInsertId() jde v mojem pripade pouzit poude na $db->lastinsertid(); ale to vraci 0.

Dekuji za rady

Jan Tvrdík
Nette guru | 2595
+
0
-

@riski: Verze Nette? Má ta tabulka určitě nastavený AUTO INCREMENT?

Šaman
Člen | 2666
+
0
-

A sorry za blbou poznámku, ale pro jistotu – určitě ten INSERT něco úspěšně vložil do db? Tzn, že ta query vrací 1?

Editoval Šaman (24. 4. 2013 9:29)

riski
Člen | 53
+
0
-

Verze nette v2.0.10, id bigint(20) Auto Increment, takze urcite ma. Myslel jsem ze bych pouzil neco jako $row = $db->query(‚insert‘);
$row->lastinsertid(); ale nejde.

Jan Tvrdík napsal(a):

@riski: Verze Nette? Má ta tabulka určitě nastavený AUTO INCREMENT?

riski
Člen | 53
+
0
-

Ano uklada do db, id se samo inkrementuje.

Šaman napsal(a):

A sorry za blbou poznámku, ale pro jistotu – určitě ten INSERT něco úspěšně vložil do db? Tzn, že ta query vrací 1?

Šaman
Člen | 2666
+
0
-

riski napsal(a):

Verze nette v2.0.10, id bigint(20) Auto Increment, takze urcite ma. Myslel jsem ze bych pouzil neco jako $row = $db->query(‚insert‘);
$row->lastinsertid(); ale nejde.

Když už máš $row, tak použij $row->id. Já lastInsertId() nepoužívám vůbec, chápu to jako interní fci databázové vrstvy.

riski
Člen | 53
+
0
-

Nene, to jsem spatne napsal, nemam $row… proste vkladam do db a potrebuji zjistit to posledni vlozene id.

Šaman napsal(a):

riski napsal(a):

Verze nette v2.0.10, id bigint(20) Auto Increment, takze urcite ma. Myslel jsem ze bych pouzil neco jako $row = $db->query(‚insert‘);
$row->lastinsertid(); ale nejde.

Když už máš $row, tak použij $row->id. Já lastInsertId() nepoužívám vůbec, chápu to jako interní fci databázové vrstvy.

Draffix
Člen | 146
+
0
-

Čistě teoreticky, když si dumpneš $row, co získáš?

Šaman
Člen | 2666
+
0
-

Koukal jsem na implementaci a NDatabase jen obaluje PDO objekt, který tu getLastInsertId() odsahuje, Nette tuto metodu neimplementuje. Takže nevím, kde by mohla být chyba.

Ale zkus to zapsat takhle, dostaneš $row a bude se ti s tím líp pracovat.

<?php
$row = $database->getTable('FooTable')->insert(array $data);
$id = $row->id;
?>
Šaman
Člen | 2666
+
0
-

Draffix napsal(a):

Čistě teoreticky, když si dumpneš $row, co získáš?

Pokud používá zápis query, tak získá počet ovlivněných řádků, tedy předpokládám 1. Objekt získá pomocí metody insert.

riski
Člen | 53
+
0
-

Dekuji, takto to funguje. ;)

Šaman napsal(a):

Koukal jsem na implementaci a NDatabase jen obaluje PDO objekt, který tu getLastInsertId() odsahuje, Nette tuto metodu neimplementuje. Takže nevím, kde by mohla být chyba.

Ale zkus to zapsat takhle, dostaneš $row a bude se ti s tím líp pracovat.

<?php
$row = $database->getTable('FooTable')->insert(array $data);
$id = $row->id;
?>