it-swarm.com.de

Holen Sie sich die letzte eingefügte ID mit Laravel Eloquent

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!

218
SoldierCorp

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);
309
xdazz

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();
94
Benubird

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);
}
47
dave

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
]);

Siehe: https://laravel.com/docs/5.1/queries#inserts

36
Aamir

**** 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 ;
33
Majbah Habib

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;
    }
}
14
Mujibur

Das hat in Laravel 4.2 funktioniert

$id = User::insertGetId([
    'username' => Input::get('username'),
    'password' => Hash::make('password'),
    'active'   => 0
]);
12
user28864

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);
}
11
ngakak

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.');
    }
9
Qamar Uzman

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

8
Niklesh Raut

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
4
Amir

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.

2
Abhishek Goel

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);
}
2
HItesh Tank

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);
}
2
bobbybackblech

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);
2
Faridul Khan

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)
2
Tayyab_Hussain

Du kannst das:

$result=app('db')->insert("INSERT INTO table...");

$lastInsertId=app('db')->getPdo()->lastInsertId();
1
$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);
1
Kamal Maisuriya

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.

0
dustypaws

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();
}
0
automatix

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.

0
PPL

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);
0
sabuz

Optionale Methode ist:

$lastID = DB::table('EXAMPLE-TABLE')
                ->orderBy('id', 'desc')
                ->first();

$lastId = $lastProduct->id;

Quelle aus Laravel 5.8 version

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);
}
0
Maxpoint

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]']);
0
srmilon