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

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

Zdravím,

potřeboval bych s něčím pomoct (s Nette a celkově PHP jsem začal včera :-))

Potřebuju uložit formulář a část dat uložit do jedné tabulky, zjistit ID vloženého záznamu a zbylé data + ID jako cizí klíč uložit do druhé tabulky.

$this->model->getAddresses()->insert(array(
               'idaddress' => null,
               'i_firstname' => $form->values->i_firstname,
               'i_lastname' => $form->values->i_lastname,
               'i_company' => $form->values->i_company,
               'i_street' => $form->values->i_street,
               'i_city' => $form->values->i_city,
               'i_zipcode' => $form->values->i_zipcode,
               'i_country' => $form->values->i_country,
               'p_firstname' => $form->values->p_firstname,
               'p_lastname' => $form->values->p_lastname,
               'p_company' => $form->values->p_company,
               'p_street' => $form->values->p_street,
               'p_city' => $form->values->p_city,
               'p_zipcode' => $form->values->p_zipcode,
               'p_country' => $form->values->p_country,
           ));

           $this->model->getCustomers()->insert(array(
               'idcustomer' => null,
               'email' => $form->values->email,
               'password' => hash('sha512', $pass . str_repeat('hhzhfhvcb', 10)),
               'ico' => $form->values->ico,
               'dic' => $form->values->dic,
               'phone' => $form->values->phone,
               'idaddress' => mysql_insert_id()
           ));

mysql_insert_id() by mělo vracet poslední vygenerované ID, jenže to vrací 0 a tak mi to při vkládání vypisuje error kvůli integritě dat. A teď nevím co s tím. Je potřeba po tom insertu do první tabulky to nějak commitnout? Nebo existuje nějaká jiná cesta, jak to ID zjistit? Nebo to dělám úplně blbě? :D

Díky za pomoc

pawouk
Člen | 172
+
0
-

Možná by ses měl trochu pobrouzdat v \Nette\Database tam je odpověd na spoustu otázek, například že insert vrací activeRow, takže id získáš takot:

$row = $this->model->getAddresses()->insert(....);
$id = $row->id;
fcbchachar
Člen | 3
+
0
-

Díky, už to jede :-)

ViPEr*CZ*
Člen | 813
+
-1
-

Nebo i takto to jde: database->lastInsertId()

Tomáš Votruba
Moderator | 1114
+
+1
-

fcbchachar napsal(a):

$this->model->getAddresses()->insert(array(
               'idaddress' => null,
               'i_firstname' => $form->values->i_firstname,
               'i_lastname' => $form->values->i_lastname,
               'i_company' => $form->values->i_company,
               'i_street' => $form->values->i_street,
               'i_city' => $form->values->i_city,
               'i_zipcode' => $form->values->i_zipcode,
               'i_country' => $form->values->i_country,
               'p_firstname' => $form->values->p_firstname,
               'p_lastname' => $form->values->p_lastname,
               'p_company' => $form->values->p_company,
               'p_street' => $form->values->p_street,
               'p_city' => $form->values->p_city,
               'p_zipcode' => $form->values->p_zipcode,
               'p_country' => $form->values->p_country,
           ));

Možná ti to v budoucnu ušetří spoustu práce. Výše uvedený kód lze zapsat takto:

$values = $form->getValues(TRUE); // same as: (array) $form->values;
$values["idaddress"] = NULL;

$this->model->getAddresses()->insert($values);
fcbchachar
Člen | 3
+
0
-

Díky, to se bude hodit :-)

duskohu
Člen | 778
+
0
-

caute a viete mi poradit preco ked mam

    $row = $this->context->createTasks()->insert(array(
        'task_name' => $form->values->task_name,
        'user_id' => $form->values->userId,
        'created' => new DateTime(),
        'date_end' => NULL,
        'finish_term' => new DateTime(),
        'tasklist_id' => $this->taskList->id
    ));

$taskId = $row->id;
VRATI : Undefined offset: 2
uestla
Backer | 796
+
0
-

Chyba je jinde, podívej se, na jakém řádku ti to hlásí…

duskohu
Člen | 778
+
0
-

Je to hned po odoslani formulara:

<?php $iterations = 0; foreach ($iterator = $_l->its[] = new Nette\Iterators\CachingIterator($tasks) as $task): ?>

ale pokial nepouzijem : $taskId = $row->id;
prebehne to ok

Editoval duskohu (16. 7. 2012 8:54)

Tomáš Votruba
Moderator | 1114
+
0
-

Zkus dumpnout $row, případně projdi foreachem, abys zjistil, co v ní je.

Jan Endel
Člen | 1016
+
0
-

netušíme jak máš implementovanou metodu addOrder, potažmo hoď sem dump row co to vypíše.