Laravel, obtenir le dernier id d'insertion en utilisant Eloquent

J'utilise actuellement ce code pour insérer des données dans une table:

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

Et je veux retourner le dernier ID inséré mais je ne sais pas comment l'obtenir.

Cordialement!

195
demandé sur SoldierCorp 2014-01-13 10:02:24

22 réponses

Après save, $data->id devrait être le dernier id 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);
287
répondu xdazz 2018-09-23 14:33:01

Xdazz a raison dans ce cas, mais pour le bénéfice des futurs visiteurs qui pourraient utiliser DB::statement ou DB::insert, il y a un autre moyen:

DB::getPdo()->lastInsertId();
83
répondu Benubird 2017-05-23 12:18:13

Pour tous ceux qui aiment aussi comment Jeffrey Way utilise Model::create() dans ses tutoriels Laracasts 5, où il envoie simplement la requête directement dans la base de données sans définir explicitement chaque champ dans le contrôleur, et en utilisant le modèle {[2] } pour l'affectation de masse (très important, pour toute personne nouvelle et utilisant cette façon): j'ai lu beaucoup de base de données, finissent par définir les choses que vous voulez filtrer, etc. Cela m'a déçu, parce que je veux utiliser l'affectation de masse et écrire moins de code si possible. Heureusement Eloquent create method enveloppe simplement la méthode save (ce que @xdazz cité ci-dessus), de sorte que vous pouvez toujours tirer le dernier ID créé...

public function store() {

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

    return redirect('company/'.$id);
}
40
répondu dave 2015-07-05 10:20:33

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

$id = DB::table('users')->insertGetId([
    'email' => 'john@example.com',
    'votes' => 0
]);

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

33
répondu Aamir 2018-08-17 17:45:54

**** Pour Laravel ****

Créez D'abord un objet, puis définissez la valeur des attributs pour cet objet, puis enregistrez l'enregistrement de l'objet, puis obtenez le dernier id inséré. tels que

$user = new User();        

$user->name = 'John';  

$user->save();

/ / Maintenant obtenir le dernier id inséré

$insertedId = $user->id;

echo $insertedId ;
27
répondu Majbah Habib 2016-07-25 06:16:43

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;
    }
}
13
répondu Mujibur 2015-02-21 07:48:14

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);
}
10
répondu ngakak 2018-08-17 17:47:03

Voici comment nous pouvons obtenir le dernier id 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
répondu Qamar Uzman 2014-04-30 07:45:48

Cela a fonctionné pour moi dans laravel 4.2

$id = User::insertGetId([
    'username' => Input::get('username'),
    'password' => Hash::make('password'),
    'active'   => 0
]);
9
répondu user28864 2018-08-17 17:48:19

Utilisez insertGetId pour insérer et se faire insérer id en même temps

À Partir de doc

Si la table a un id d'incrémentation automatique, Utilisez la méthode insertGetId pour insérer un enregistrement, puis récupérer L'ID:

Par Model

$id = Model::insertGetId(["name"=>"Niklesh","email"=>"myemail@gmail.com"]);

Par DB

$id = DB::table('users')->insertGetId(["name"=>"Niklesh","email"=>"myemail@gmail.com"]);

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

7
répondu C2486 2017-09-29 06:32:07

Après avoir enregistré le modèle, l'instance initialisée a l'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
3
répondu Amir 2018-08-17 17:49:00

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

return Response::json(['success' => true, 'last_insert_id' => $data->id], 200)
2
répondu Tayyab_Hussain 2015-11-03 10:30:45

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
répondu bobbybackblech 2016-05-08 11:30:45

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 (c'est-à-dire 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
répondu HItesh Tank 2017-03-21 18:47:59

Après

$data->save()

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

Remarque: Si votre autoincrement nom de la colonne est sno, alors vous devriez utiliser $data->sno et non $data->id

2
répondu Abhishek Goel 2017-03-31 06:48:36

Vous pouvez faire ceci:

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

$lastInsertId=app('db')->getPdo()->lastInsertId();
1
répondu Dnyaneshwar Harer 2017-08-17 11:27:02
$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
répondu Kamal Maisuriya 2018-08-17 17:50:10

Utilisation Du Modèle Eloquent

$user = new Report();        
$user->email= 'johndoe@example.com';  
$user->save();
$lastId = $user->id;

Utilisation Du Générateur De Requêtes

$lastId = DB::table('reports')->insertGetId(['email' => 'johndoe@example.com']);
0
répondu srmilon 2017-10-21 19:21:39

Pour obtenir le dernier id inséré dans la base de données Vous pouvez utiliser

$data = new YourModelName;
$data->name = 'Some Value';
$data->email = 'abc@mail.com';
$data->save();
$lastInsertedId = $data->id;

Ici $lastInsertedId vous donnera le dernier ID d'incrément automatique inséré.

0
répondu PPL 2018-02-26 10:09:36

Après Avoir Enregistré $data->save(). toutes les données sont poussées à l'intérieur de $data. Comme il s'agit d'un objet et que la ligne actuelle est récemment enregistrée dans $data. dernière insertId sera trouvé à l'intérieur de $data->id.

Le code de réponse sera:

return Response::json(array('success' => true, 'last_insert_id' => $data->id), 200);
0
répondu sabuz 2018-08-17 17:51:02
public function store( UserStoreRequest $request ) {
    $input = $request->all();
    $user = User::create($input);
    $userId=$user->id 
}
-1
répondu temporary account 2017-09-08 11:36:54

Utilisation Du Modèle Eloquent

use App\Company;

public function saveDetailsCompany(Request $request)
{

$createcompany=Company::create(['nombre'=>$request->input('name'),'direccion'=>$request->input('address'),'telefono'=>$request->input('phone'),'email'=>$request->input('emaile'),'giro'=>$request->input('type')]);

// Last Inserted Row ID

echo $createcompany->id;

}

Utilisation Du Générateur De Requêtes

$createcompany=DB::table('company')->create(['nombre'=>$request->input('name'),'direccion'=>$request->input('address'),'telefono'=>$request->input('phone'),'email'=>$request->input('emaile'),'giro'=>$request->input('type')]);

echo $createcompany->id;

Pour plus de méthodes pour obtenir le dernier id de ligne inséré dans Laravel : http://phpnotebook.com/95-laravel/127-3-methods-to-get-last-inserted-row-id-in-laravel

-1
répondu Karthik 2018-06-21 04:29:59