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 eingegebene ID zurückgeben, weiß aber nicht, wie ich sie bekommen kann.
Mit freundlichen Grüßen!
Nach save
sollte $data->id
die letzte eingefügte ID sein.
return Response::json(array('success' => true, 'last_insert_id' => $data->id), 200);
Für eine aktualisierte Version von Laravel versuchen Sie dies
return response()->json(array('success' => true, 'last_insert_id' => $data->id), 200);
xdazz ist in diesem Fall richtig, aber für zukünftige Besucher, die DB::statement
oder DB::insert
verwenden, gibt es einen anderen Weg:
DB::getPdo()->lastInsertId();
Für alle, die auch gerne wissen, wie Jeffrey Way Model::create()
in seinen Laracasts 5-Tutorials verwendet, wobei er die Anfrage einfach direkt in die Datenbank sendet, ohne jedes Feld im Controller explizit festzulegen und den $fillable
des Modells für die Massenzuweisung zu verwenden (sehr wichtig für jeden neuen Benutzer) und auf diese Weise): Ich habe eine Menge Leute gelesen, die insertGetId()
verwendet haben, aber dies respektiert leider nicht die $fillable
-Whitelist. Sie erhalten also Fehler beim Versuch, _token und alles einzufügen, das kein Feld in der Datenbank ist Dinge, die Sie filtern möchten, usw. Das hat mich aus dem Gleichgewicht gebracht, weil ich die Massenzuweisung verwenden und insgesamt weniger Code schreiben möchte, wenn dies möglich ist. Glücklicherweise umschließt die Eloquent-Methode create
die Speichermethode (was @xdazz oben zitiert), sodass Sie immer noch die zuletzt erstellte ID abrufen können ...
public function store() {
$input = Request::all();
$id = Company::create($input)->id;
return redirect('company/'.$id);
}
Wenn die Tabelle eine automatisch inkrementierende ID hat, fügen Sie einen Datensatz mit der Methode insertGetId ein und rufen Sie die ID ab:
$id = DB::table('users')->insertGetId([
'email' => '[email protected]',
'votes' => 0
]);
**** Für Laravel ****
Erstellen Sie zuerst ein Objekt, setzen Sie dann den Attributwert für dieses Objekt, speichern Sie dann den Objektdatensatz und rufen Sie die zuletzt eingefügte ID ab. sowie
$user = new User();
$user->name = 'John';
$user->save();
// Holen Sie sich jetzt die zuletzt eingefügte ID
$insertedId = $user->id;
echo $insertedId ;
In Laravel 5 können Sie Folgendes tun:
use App\Http\Requests\UserStoreRequest;
class UserController extends Controller {
private $user;
public function __construct( User $user )
{
$this->user = $user;
}
public function store( UserStoreRequest $request )
{
$user= $this->user->create([
'name' => $request['name'],
'email' => $request['email'],
'password' => Hash::make($request['password'])
]);
$lastInsertedId= $user->id;
}
}
Das hat in Laravel 4.2 funktioniert
$id = User::insertGetId([
'username' => Input::get('username'),
'password' => Hash::make('password'),
'active' => 0
]);
Hier ist ein Beispiel:
public static function saveTutorial(){
$data = Input::all();
$Tut = new Tutorial;
$Tut->title = $data['title'];
$Tut->tutorial = $data['tutorial'];
$Tut->save();
$LastInsertId = $Tut->id;
return Response::json(array('success' => true,'last_id'=>$LastInsertId), 200);
}
So erhalten wir die letzte eingefügte ID in Laravel 4
public function store()
{
$input = Input::all();
$validation = Validator::make($input, user::$rules);
if ($validation->passes())
{
$user= $this->user->create(array(
'name' => Input::get('name'),
'email' => Input::get('email'),
'password' => Hash::make(Input::get('password')),
));
$lastInsertedId= $user->id; //get last inserted record's user id value
$userId= array('user_id'=>$lastInsertedId); //put this value equal to datatable column name where it will be saved
$user->update($userId); //update newly created record by storing the value of last inserted id
return Redirect::route('users.index');
}
return Redirect::route('users.create')->withInput()->withErrors($validation)->with('message', 'There were validation errors.');
}
Verwenden Sie insertGetId
, um gleichzeitig id
einzufügen und einzufügen
Von doc
Wenn die Tabelle eine automatisch zunehmende ID hat, verwenden Sie die insertGetId-Methode Einen Datensatz einfügen und dann die ID abrufen:
Von Model
$id = Model::insertGetId(["name"=>"Niklesh","email"=>"[email protected]"]);
Von DB
$id = DB::table('users')->insertGetId(["name"=>"Niklesh","email"=>"[email protected]"]);
Für weitere Informationen: https://laravel.com/docs/5.5/queries#inserts
Nach dem Speichern des Modells hat die initialisierte Instanz die ID:
$report = new Report();
$report->user_id = $request->user_id;
$report->patient_id = $request->patient_id;
$report->diseases_id = $request->modality;
$isReportCreated = $report->save();
return $report->id; // this will return the saved report id
Nach dem
$data->save()
$data->id
gibt dir die eingefügte ID,
Hinweis: Wenn der Name der Autoincrement-Spalte sno ist, sollten Sie $data->sno
und nicht $data->id
verwenden.
Für Laravel: Wenn Sie einen neuen Datensatz einfügen und $data->save()
aufrufen, führt diese Funktion eine INSERT-Abfrage aus und gibt den Primärschlüsselwert zurück (d. H. id standardmäßig).
Sie können folgenden Code verwenden:
if($data->save()) {
return Response::json(array('status' => 1, 'primary_id'=>$data->id), 200);
}
In Laravel 5.2 würde ich es so sauber wie möglich machen:
public function saveContact(Request $request, Contact $contact)
{
$create = $contact->create($request->all());
return response()->json($create->id, 201);
}
Für Einlage ()
Example:
$ data1 = array ( 'company_id' => $ company_id, 'branch_id' => $ branch_id );
$insert_id = CreditVoucher::insert($data1);
$id = DB::getPdo()->lastInsertId();
dd($id);
Nach Speichern eines Datensatzes in der Datenbank können Sie auf id durch $data->id
zugreifen.
return Response::json(['success' => true, 'last_insert_id' => $data->id], 200)
Du kannst das:
$result=app('db')->insert("INSERT INTO table...");
$lastInsertId=app('db')->getPdo()->lastInsertId();
$objPost = new Post;
$objPost->title = 'Title';
$objPost->description = 'Description';
$objPost->save();
$recId = $objPost->id; // If Id in table column name if other then id then user the other column name
return Response::json(['success' => true,'id' => $recId], 200);
Obwohl diese Frage etwas veraltet ist. Meine schnelle und schmutzige Lösung würde so aussehen:
$last_entry = Model::latest()->first();
Aber ich denke, es ist anfällig für Rennbedingungen in hoch frequentierten Datenbanken.
Der kürzeste Weg ist wahrscheinlich ein Aufruf der refresh()
am Modell:
public function create(array $data): MyModel
{
$myModel = new MyModel($dataArray);
$myModel->saveOrFail();
return $myModel->refresh();
}
Zum Abrufen der zuletzt eingefügten ID in der Datenbank Sie können verwenden
$data = new YourModelName;
$data->name = 'Some Value';
$data->email = '[email protected]';
$data->save();
$lastInsertedId = $data->id;
hier gibt $ lastInsertedId die zuletzt eingefügte Auto-Inkrement-ID an.
Nach dem Speichern von $data->save()
. Alle Daten werden in $data
gepusht. Da dies ein Objekt ist und die aktuelle Zeile kürzlich in $data
gespeichert wurde. der letzte insertId
wird in $data->id
gefunden.
Antwortcode wird sein:
return Response::json(array('success' => true, 'last_insert_id' => $data->id), 200);
Optionale Methode ist:
$lastID = DB::table('EXAMPLE-TABLE')
->orderBy('id', 'desc')
->first();
$lastId = $lastProduct->id;
Sie können die zuletzt eingefügte ID mit demselben Objekt abrufen, das Sie als Speichermethode aufrufen.
$data->save();
$inserted_id = $data->id;
Sie können also einfach schreiben:
if ($data->save()) {
return Response::json(array('success' => true,'inserted_id'=>$data->id), 200);
}
Eloquent-Modell verwenden
$user = new Report();
$user->email= '[email protected]';
$user->save();
$lastId = $user->id;
Query Builder verwenden
$lastId = DB::table('reports')->insertGetId(['email' => '[email protected]']);