Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Zend] Last inserted ID z create row
Forum PHP.pl > Forum > PHP > Frameworki
reyne
Witam, mam taki kawałek kodu (z Social Engine 4 opartym na Zendzie), który tworzy wydarzenie i dodaje również temat z taką samą nazwą na forum:

  1. // Process
  2. $values = $form->getValues();
  3. $values['user_id'] = $viewer->getIdentity();
  4. $values['parent_type'] = $parent_type;
  5. $values['parent_id'] = $parent_id;
  6. if( $parent_type == 'group' && Engine_Api::_()->hasItemType('group') && empty($values['host']) ) {
  7. $values['host'] = $group->getTitle();
  8. }
  9.  
  10. $db = Engine_Api::_()->getDbtable('events', 'event')->getAdapter();
  11.  
  12.  
  13. $db->beginTransaction();
  14.  
  15. try
  16. {
  17. // Create event
  18. $table = $this->_helper->api()->getDbtable('events', 'event');
  19. $event = $table->createRow();
  20. $lastid = $this->table->getAdapter()->lastInsertId();
  21.  
  22. $event->setFromArray($values);
  23. $event->save();
  24.  
  25. $data = array(
  26. 'forum_event_id' => '',
  27. 'topic_id' => '7',
  28. 'event_id' => ''.$lastid.''
  29. );
  30.  
  31. $db->insert('engine4_forum_event_topics',$data);


Sprawa wydaję się prosta bo wystarczy użyć funkcji lastInsertId();
Jednak nie działa - zmienna lastid nie przekazuje ostatnio dodanego rekordu do bazy, bo źle to wstawiam i nie wiem gdzie to powinno być.

Mam taki błąd:

  1. Call to a member function getAdapter() on a non-object


Jak wstawić i "wychwycić" ostatnio dodane ID eventu z bazy poprawnie?
melkorm

  1. //zamiast tego
  2. $lastid = $this->table->getAdapter()->lastInsertId();
  3. // powinno chyba być
  4. $lastid = $table->getAdapter()->lastInsertId();


Sam błąd mówi wszystko.

P.S. Nawet nie chce wiedzieć co to za aplikacja i kto ją psiał bo się wystraszyłem tymi tworami :/
reyne
Co do skryptu jest to skrypt społecznościowy.

niestety nie działa, zmienna zwraca wartość 0
melkorm
Nie wiem co to za skrypt, a herbaty w domu nie mam, a kawę piję rozpuszczalną więc z fusów raczej nie powróżę :/
reyne
szkoda, może powinieneś sprobować ?winksmiley.jpg bo jednak okazało się to bardzo proste, sam do tego doszedłem:

  1. $event->setFromArray($values);
  2. $event->save();
  3. $lastid = $event->event_id;


i mamy ID winksmiley.jpg

Temat do zamknięcia.
melkorm
Cytat
szkoda, może powinieneś sprobować ? bo jednak okazało się to bardzo proste, sam do tego doszedłem:


Bo to jest poprawny scenariusz.

Ja się kierowałem tym czymś co Ty wkleiłeś.

Chciałeś "ostatnie ID" nie konkretnie id zapisanego wydarzenia.

Zend przy ActiveRecord gdy robisz save od razu ustawia id rekordu na wstawione.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.