[php] Laravel, obtenir le dernier identifiant d'insertion en utilisant Eloquent



Answers

xdazz 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();
Question

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 identifiant inséré mais je ne sais pas comment l'obtenir.

Sincères amitiés!




Utilisez insertGetId pour insérer et obtenir l' id inséré en même temps

De la doc

Si la table possède un ID auto-incrémenté, 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: doc




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



Tu peux le faire:

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

$lastInsertId=app('db')->getPdo()->lastInsertId();



Si la table possède 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]
    );

Reportez-vous à: https://laravel.com/docs/5.1/queries#inserts




Après avoir enregistré 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)



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 l' ID par défaut).

Vous pouvez utiliser le code suivant:

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



En laravel 5: vous pouvez le faire:

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



Pour obtenir le dernier identifiant 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;

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




En utilisant un modèle éloquent

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

Utilisation de Query Builder

$lastId = DB::table('reports')->insertGetId(['email' => 'johndoe@example.com']);





Related