web-dev-qa-db-fra.com

Obtenir le dernier identifiant inséré avec Laravel Eloquent

J'utilise actuellement le code ci-dessous pour insérer des données dans un tableau:

<?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);
    }
}

Je souhaite renvoyer la dernière pièce d'identité insérée mais je ne sais pas comment l'obtenir.

Sincères amitiés!

218
SoldierCorp

Après save, $data->id devrait être le dernier identifiant inséré.

return Response::json(array('success' => true, 'last_insert_id' => $data->id), 200);

Pour la version mise à jour de laravel, essayez ceci

return response()->json(array('success' => true, 'last_insert_id' => $data->id), 200);
309
xdazz

xdazz a raison dans ce cas, mais pour le bénéfice des futurs visiteurs susceptibles d’utiliser DB::statement ou DB::insert, il existe un autre moyen:

DB::getPdo()->lastInsertId();
94
Benubird

Pour ceux qui aiment aussi la façon dont Jeffrey Way utilise Model::create() dans ses tutoriels Laracasts 5, où il envoie simplement la demande directement dans la base de données sans définir explicitement chaque champ du contrôleur et en utilisant le $fillable du modèle pour l'affectation en masse (très important, pour les nouveaux utilisateurs). et en utilisant cette méthode): J'ai lu beaucoup de personnes utilisant insertGetId(), mais malheureusement, cela ne respecte pas la liste blanche $fillable et vous obtiendrez des erreurs en essayant d'insérer _token et tout ce qui ne fait pas partie de la base de données. choses que vous voulez filtrer, etc. Cela m’a écoeuré, parce que je veux utiliser l’affectation en masse et écrire globalement moins de code lorsque cela est possible. Heureusement, la méthode create d'Eloquent enveloppe la méthode de sauvegarde (ce que @xdazz a cité plus haut), de sorte que vous pouvez toujours extraire le dernier ID créé ...

public function store() {

    $input = Request::all();
    $id = Company::create($input)->id;

    return redirect('company/'.$id);
}
47
dave

Si la table a un identifiant auto-incrémenté, utilisez la méthode insertGetId pour insérer un enregistrement, puis récupérez l'identifiant:

$id = DB::table('users')->insertGetId([
    'email' => '[email protected]',
    'votes' => 0
]);

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

36
Aamir

**** Pour Laravel ****

Commencez par créer un objet, puis définissez la valeur des attributs pour cet objet, sauvegardez ensuite l'enregistrement d'objet, puis récupérez le dernier identifiant inséré. tel que

$user = new User();        

$user->name = 'John';  

$user->save();

// Obtention du dernier identifiant inséré

$insertedId = $user->id;

echo $insertedId ;
33
Majbah Habib

Dans laravel 5, vous pouvez faire ceci: 

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

Cela a fonctionné pour moi dans laravel 4.2

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

Voici un exemple:

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

Voici comment on peut obtenir le dernier identifiant inséré dans 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

Utilisez insertGetId pour insérer et être inséré id en même temps 

De doc

Si la table a un identifiant auto-incrémenté, utilisez la méthode insertGetId insérer un enregistrement puis récupérer l'ID:

Par Model

$id = Model::insertGetId(["name"=>"Niklesh","email"=>"[email protected]"]);

Par DB

$id = DB::table('users')->insertGetId(["name"=>"Niklesh","email"=>"[email protected]"]);

Pour plus de détails: https://laravel.com/docs/5.5/queries#inserts

8
Niklesh Raut

Après avoir sauvegardé le modèle, l'instance initialisée a l'identifiant suivant:

$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

Après

$data->save()

$data->id vous donnera l'identifiant inséré,

Remarque: Si votre nom de colonne auto-incrémenté est sno , vous devez utiliser $data->sno et non $data->id

2
Abhishek Goel

Pour Laravel, si vous insérez un nouvel enregistrement et appelez $data->save(), cette fonction exécute une requête INSERT et renvoie la valeur de la clé primaire (par exemple, id par défaut).

Vous pouvez utiliser le code suivant:

if($data->save()) {
    return Response::json(array('status' => 1, 'primary_id'=>$data->id), 200);
}
2
HItesh Tank

Dans Laravel 5.2, je le rendrais aussi propre que possible:

public function saveContact(Request $request, Contact $contact)
{
   $create = $contact->create($request->all());
   return response()->json($create->id,  201);
}
2
bobbybackblech

Pour insert ()

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

Après save un enregistrement dans la base de données, vous pouvez accéder à id by $data->id

return Response::json(['success' => true, 'last_insert_id' => $data->id], 200)
2
Tayyab_Hussain

Tu peux le faire:

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

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

Bien que cette question est un peu datée. Ma solution rapide et sale ressemblerait à ceci:

$last_entry = Model::latest()->first();

Mais je suppose que cela est vulnérable aux conditions de concurrence sur des bases de données très fréquentées.

0
dustypaws

Le chemin le plus court est probablement un appel de la refresh() sur le modèle:

public function create(array $data): MyModel
{
    $myModel = new MyModel($dataArray);
    $myModel->saveOrFail();
    return $myModel->refresh();
}
0
automatix

Pour obtenir le dernier identifiant inséré dans la base de donnéesVous pouvez utiliser

$data = new YourModelName;
$data->name = 'Some Value';
$data->email = '[email protected]';
$data->save();
$lastInsertedId = $data->id;

ici $ lastInsertedId vous donnera le dernier identifiant d'incrémentation automatique inséré.

0
PPL

Après l'enregistrement $data->save(). toutes les données sont insérées dans $data. Comme il s’agit d’un objet et que la ligne actuelle vient d’être enregistrée dans $data. alors dernière insertId sera trouvé dans $data->id

Le code de réponse sera:

return Response::json(array('success' => true, 'last_insert_id' => $data->id), 200);
0
sabuz

La méthode optionnelle sera:

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

$lastId = $lastProduct->id;

Source de Laravel version 5.8

0

Vous pouvez obtenir le dernier identifiant inséré avec le même objet que vous appelez la méthode save;

$data->save();
$inserted_id = $data->id;

Donc vous pouvez simplement écrire:

if ($data->save()) {
    return Response::json(array('success' => true,'inserted_id'=>$data->id), 200);
}
0
Maxpoint

Utilisation du modèle éloquent  

$user = new Report();        
$user->email= '[email protected]';  
$user->save();
$lastId = $user->id;

Utilisation de Query Builder

$lastId = DB::table('reports')->insertGetId(['email' => '[email protected]']);
0
srmilon