Ich verwende derzeit den folgenden Code, um Daten in eine Tabelle einzufügen:
<?php
public function saveDetailsCompany()
{
$post = Input::All();
$data = new Company;
$data->nombre = $post['name'];
$data->direccion = $post['address'];
$data->telefono = $post['phone'];
$data->email = $post['email'];
$data->giro = $post['type'];
$data->fecha_registro = date("Y-m-d H:i:s");
$data->fecha_modificacion = date("Y-m-d H:i:s");
if ($data->save()) {
return Response::json(array('success' => true), 200);
}
}
Ich möchte die zuletzt eingefügte ID zurückgeben, weiß aber nicht, wie ich sie erhalten soll.
Mit freundlichen Grüßen!
0
. In meinem Fall war die ID eine Zeichenfolge (UUID), und damit dies funktioniert, musste ichpublic $incrementing = false;
mein Modell hinzufügen .aid
und ich habe festgelegt,$incrementing = false;
aber es wird auch nicht zurückgegeben!xdazz ist in diesem Fall richtig, aber zum Nutzen zukünftiger Besucher, die möglicherweise
DB::statement
oder verwendenDB::insert
, gibt es einen anderen Weg:quelle
$id = DB::table('someTable')->insertGetId( ['field' => Input['data']);
timestamps
verwendeninsertGetId
, kindly überprüfen hierinsertGetId
nur, wenn die ID-Spalten tatsächlich "ID" heißen.Für alle, die auch mögen, wie Jeffrey Way
Model::create()
in seinen Laracasts 5-Tutorials verwendet, in denen er die Anforderung direkt in die Datenbank sendet, ohne jedes Feld im Controller explizit festzulegen, und die Modelle$fillable
für die Massenzuweisung verwendet (sehr wichtig, für alle, die neu sind und verwenden auf diese Weise): Ich habe viele Leute geleseninsertGetId()
, die dies verwenden, aber leider wird die$fillable
Whitelist nicht berücksichtigt, sodass beim Versuch, _token einzufügen, und bei allem, was kein Feld in der Datenbank ist, Fehler auftreten. Am Ende werden die gewünschten Einstellungen vorgenommen Filter usw. Das hat mich umgehauen, weil ich die Massenzuweisung verwenden und insgesamt weniger Code schreiben möchte, wenn dies möglich ist. Glücklicherweise schließt diecreate
Methode von Eloquent nur die Speichermethode ein (was @xdazz oben zitiert hat), sodass Sie immer noch die zuletzt erstellte ID abrufen können ...quelle
$new = Company::create($input);
return redirect('company/'.$new->id);
Wenn die Tabelle eine automatisch inkrementierende ID hat, verwenden Sie die Methode insertGetId, um einen Datensatz einzufügen, und rufen Sie dann die ID ab:
Siehe: https://laravel.com/docs/5.1/queries#inserts
quelle
**** Für Laravel ****
Erstellen Sie zuerst ein Objekt, legen Sie dann den Attributwert für dieses Objekt fest, speichern Sie dann den Objektdatensatz und erhalten Sie die zuletzt eingefügte ID. sowie
// Jetzt die zuletzt eingefügte ID erhalten
quelle
In Laravel 5: können Sie dies tun:
quelle
Hier ist ein Beispiel:
quelle
Dies hat bei mir in Laravel 4.2 funktioniert
quelle
Hier ist, wie wir die zuletzt in Laravel 4 eingefügte ID erhalten können
quelle
Verwenden Sie
insertGetId
zum Einfügen und erhalten eingefügtid
gleichzeitig zu werdenAus doc
Durch
Model
Durch
DB
Für weitere Informationen: https://laravel.com/docs/5.5/queries#inserts
quelle
Nach dem Speichern des Modells hat die initialisierte Instanz die ID:
quelle
Zum Einfügen ()
Beispiel:
quelle
In Laravel 5.2 würde ich es so sauber wie möglich machen:
quelle
Nach
$data->id
gibt Ihnen die eingefügte ID,Hinweis: Wenn Ihr Spaltenname für die automatische Inkrementierung sno lautet, sollten Sie verwenden
$data->sno
und nicht$data->id
quelle
Nach dem Speichern eines Datensatzes in der Datenbank können Sie auf die ID von zugreifen
$data->id
quelle
Wenn Sie für Laravel einen neuen Datensatz einfügen und
$data->save()
diese Funktion aufrufen , wird eine INSERT-Abfrage ausgeführt und der Primärschlüsselwert (dh die ID) zurückgegeben standardmäßig die ).Sie können folgenden Code verwenden:
quelle
quelle
Du kannst das:
quelle
Zum Abrufen der zuletzt in die Datenbank eingefügten ID können Sie verwenden
Hier gibt $ lastInsertedId die zuletzt eingefügte Auto-Inkrement-ID an.
quelle
Der kürzeste Weg ist wahrscheinlich ein Aufruf des
refresh()
Modells:quelle
Obwohl diese Frage etwas veraltet ist. Meine schnelle und schmutzige Lösung würde so aussehen:
Aber ich denke, es ist anfällig für Rennbedingungen in stark frequentierten Datenbanken.
quelle
Sie können auch Folgendes versuchen:
quelle
Verwenden des eloquenten Modells
Verwenden des Abfrage-Generators
quelle
Nach dem Speichern
$data->save()
. Alle Daten werden hineingeschoben$data
. Da dies ein Objekt ist und die aktuelle Zeile erst kürzlich darin gespeichert wurde$data
. so wird zuletztinsertId
drinnen gefunden$data->id
.Der Antwortcode lautet:
quelle
Optionale Methode ist:
Quelle aus der Version Laravel 5.8
quelle
Sie können die zuletzt eingefügte ID mit demselben Objekt abrufen, das Sie als Speichermethode aufrufen.
Sie können also einfach schreiben:
quelle
Sie können die zuletzt eingefügte Datensatz-ID problemlos abrufen
Es ist ein großartiger Trick, die ID aus dem zuletzt eingefügten Datensatz in der Datenbank abzurufen.
quelle
$user->id
Nach dem Erstellen reicht es aus, dies einfach zu tun , um die eingefügte ID zu erhalten.quelle
Verwenden des eloquenten Modells
Verwenden des Abfrage-Generators
Weitere Methoden zum Abrufen der ID der zuletzt eingefügten Zeile in Laravel: http://phpnotebook.com/95-laravel/127-3-methods-to-get-last-inserted-row-id-in-laravel
quelle
Sie können die
$this
Konstruktorvariable verwenden, um "Zuletzt eingefügte ID mit Laravel Eloquent" (ohne zusätzliche Spalte hinzuzufügen) in der aktuellen Funktion oder Steuerung zu erzielen.quelle