PEAR-Forum.de Übersicht Thema anzeigen - DB_Table lastInsertId?

DB_Table lastInsertId?


 

PEAR-Forum.de Übersicht » Database
Neues Thema eröffnen Neue Antwort erstellen Diesen Beitrag ausdrucken
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
maybee
User


Anmeldungsdatum: 21.11.2005
Beiträge: 88

Beitrag16.10.2009 20:36    DB_Table lastInsertId? Antworten mit Zitat

Hi zusammen

ich füge über DB_Table einen insert() in meine Db ein und versuche vergebens die LastInsertID zu erhalten.

DB_Table läuft mit MDB2, ich habs über

PHP:
<?php
$res 
$table->insert($values);
$res->lastInsertId();


und

PHP:
<?php
$res 
$table->insert($values);
$table->lastInsertId();


versucht, aber leider keine Rückgabe.

Wenn ich direkt an das MDB2 Object gehe kriege ich die ID:

PHP:
<?php
$res 
$table->insert($values);
$mdb2->lastInsertId();


Hat DB_Table keinen Wrapper dafür oder hab ich was übersehen?

Danke für eure Hilfe!
Maybee
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
mark
Power User


Anmeldungsdatum: 31.05.2004
Beiträge: 970

Beitrag17.10.2009 14:14     Antworten mit Zitat

DB_Table bietet dafür keine Unterstützung. Wenn du z.B. in MySQL eine auto_increment-Spalte definiert hast, kannst du den generierten Wert über MDB2 (oder DB) anfragen - die MDB2-Instanz hast du ja sowieso und deswegen ist eine direkte Unterstützung in DB_Table eher überflüssig. Falls du das auto_increment-Feature von DB_Table selbst meinst, gilt zwar eigentlich das gleiche (Abfrage über MDB2 möglich), hier wäre aber vielleicht schon eine direkte Rückgabe sinnvoll. (Das können wir gerne mal diskutieren, falls du uns aufklärst, welche auto_increment-Variante bei dir im Einsatz ist.)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen PEAR-User
maybee
User


Anmeldungsdatum: 21.11.2005
Beiträge: 88

Beitrag18.10.2009 1:10     Antworten mit Zitat

Hi Mark

danke für deine Rückantwort.

Ich hatte mir fast sowas gedacht war aber etwas irritiert weil DB_Table MDB2 und DB unterstützt. Ich habe jetzt eine Abfrage gemacht die so aussieht:

PHP:
<?php
$db_table
->mdb2->lastInsertId();


Meine Datenbank hat im Moment einen auto_increment und ich nutze nicht das auto-increment Feature via nextId().

Wirklich notwendig wäre ein Wrapper für die lastInsertId eigentlich nicht, weil bei beiden Layern ja die Methoden zur Abfrage den gleichen Namen haben. Was aber genial wäre wenn bei dem Insert automatisch bei einem Erfolg die lastInsertId als Result zurückkommt. Dann könnte man sich eine weitere Abfrage sparen und direkt mit der ID weiterarbeiten.

Damit würden wir die "doppel" Object Abfrage ($table->db->) umgehen und eine Codezeile einsparen in der wir die ID Abfragen müssten.

Ob das ganze in das Model von DB_Table passt ist wieder etwas anderes, da habt ihr den besseren Blick Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
mark
Power User


Anmeldungsdatum: 31.05.2004
Beiträge: 970

Beitrag18.10.2009 14:33     Antworten mit Zitat

maybee hat folgendes geschrieben:
Wirklich notwendig wäre ein Wrapper für die lastInsertId eigentlich nicht, weil bei beiden Layern ja die Methoden zur Abfrage den gleichen Namen haben. Was aber genial wäre wenn bei dem Insert automatisch bei einem Erfolg die lastInsertId als Result zurückkommt. Dann könnte man sich eine weitere Abfrage sparen und direkt mit der ID weiterarbeiten.


Eine direkte Rückgabe von insert() geht nicht, weil momentan das "Ergebnis" von DB oder MDB2 zurückgegeben wird. Künftig etwas anderes zurückzugeben, wäre eine Änderung des API, was in PEAR aber nur bei "Hauptversionen" (1.x => 2.y z.B.) erlaubt ist. Für alle, die sich bereits auf das bisherige Verhalten verlassen, wäre eine solche Änderung auch nicht hilfreich.

Es bliebe also nur die Ergänzung einer weiteren Methode in DB_Table. Und in diesem Fall sehe ich keinen großen Nutzen. Wenn du magst, kannst du natürlich gerne einen Patch erstellen, der eine solche Methode ergänzt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen PEAR-User
maybee
User


Anmeldungsdatum: 21.11.2005
Beiträge: 88

Beitrag18.10.2009 21:51     Antworten mit Zitat

mark hat folgendes geschrieben:
Für alle, die sich bereits auf das bisherige Verhalten verlassen, wäre eine solche Änderung auch nicht hilfreich.


Das ist nachvollziehbar Smile

Ich kann mit dem jetzigen ganz gut leben und werde keine Änderungen vornehmen.
Das sind quasie meine ersten Gehversuche mit DB_Table, ich wolle mir nicht gleich wieder irgendwelche krummen Aufrufe in den Code einbauen und mich lieber vorher vergewissern.

Einen Wrapper würde ich mir wohl ganz simpel in dieser Form einbauen:

PHP:
<?php
function lastInsertID()
{
   return 
$this->db->lastInsertID();
}


Wirklich brauchen tut man es eigentlich nicht, aber wenn man nicht unbedingt in den Code schaut kann man im ersten Moment denken wenn eine nextID Methode da ist müsste ja eigentlich auch eine lastInsertID verfügbar sein.

Danke für deine Hilfe in jedem Fall, ich bin immer wieder gern bei euch Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
mark
Power User


Anmeldungsdatum: 31.05.2004
Beiträge: 970

Beitrag20.10.2009 21:13     Antworten mit Zitat

maybee hat folgendes geschrieben:
Einen Wrapper würde ich mir wohl ganz simpel in dieser Form einbauen:[...]


Das ist vielleicht etwas zu simpel - evtl. wäre hier noch ein wenig Fehlerbehandlung notwendig (Disclaimer: ich hab mir den Code nicht näher angeschaut). Da das Problem in diesem Fall ja leicht zu lösen war, belassen wir es erstmal dabei, denn es sind ja noch genügend andere Punkte offen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen PEAR-User
Beiträge der letzten Zeit anzeigen:   
Diese Seite übersetzen
PEAR-Forum.de Übersicht » Database
Neues Thema eröffnen Neue Antwort erstellen Diesen Beitrag ausdrucken
   Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

Zu Deinen Favoriten hinzufügen

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen