Zjištění ID posledního vloženého záznamu

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

Ahoj,

vkládám záznam do databáze a potřebuji ihned po vložení získat ID vloženého záznamu. Na fóru jsem našel nějaké rady, zkoušel jsem toto:

v presenteru

$row = $this->eskoleni->addOrder($orderData);
$lastid = $row->id;

Vyhazuje mi to ale chybu: Trying to get property of non-object

Poradí prosím někdo, co je za problém?

duke
Člen | 650
+
0
-

Problém bude v tom, že metoda addOrder nevrací objekt.

cerfotoc
Člen | 14
+
0
-

To už jsem nějak pochopil podle chybové hlášky:).

Každopádně jak mám dosáhnout toho, co chci? Jak mám zjistit id posledního vloženého záznamu?

Snažil jsem se to vyřešit podle rad ve starém tématu, ale bohužel mi to nefunguje. Děkuji všem za rady.

duke
Člen | 650
+
0
-

Pokud jsi pochopil, že problémem je to, že metoda addOrder nevrací objekt, co ti brání upravit ji tak, aby potřebný objekt vracela?

Předpokládám, že do databáze ukládáš data pomocí metody Nette\Database\Table\Selection::insert. Pokud vkládáš jeden záznam, tak tato metoda vrací objekt vkládaného řádku obohacený o položku primárního klíče.

Takže v té metodě můžeš mít něco takovéhoto:

$row = $db->table('foo')->insert($data);
// ...
return $row;
latorante
Člen | 3
+
0
-

Co takhle:

$row = $db->table('foo')->insert($data);
// tady mám poslední IDčko
$myId = $row->getPrimary();
Šaman
Člen | 2666
+
0
-

latorante napsal(a):

Co takhle:

$row = $db->table('foo')->insert($data);
// tady mám poslední IDčko
$myId = $row->getPrimary();

Ve většině případů stačí napsat

$row = $db->table('foo')->insert($data);
$myId = $row->id;

Samozřejmě tvůj zápis je obecnější, ale taky delší a primární klíč se u většiny programátorů jmenuje id.
Problémem @cerfotoc bylo, že $row neobsahovalo instanci ActiveRow a tudíž neobsahovalo ani id, ani neznalo metodu getPrimary(). Takže rada byla upravit metodu addOrder() tak, aby tuto instanci vracela (return $row;).

Editoval Šaman (9. 5. 2013 15:17)

Malakimek
Člen | 9
+
0
-

Já používám:

$lastid=$this->connection->fetch('SELECT LAST_INSERT_ID ();');