Zjištění ID posledního vloženého záznamu
- cerfotoc
- Člen | 14
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
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;
- Šaman
- Člen | 2666
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)