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!
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);
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);
}
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
]);
**** 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 ;
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;
}
}
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);
}
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.');
}
Cela a fonctionné pour moi dans laravel 4.2
$id = User::insertGetId([
'username' => Input::get('username'),
'password' => Hash::make('password'),
'active' => 0
]);
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
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
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)
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);
}
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);
}
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
Vous pouvez faire ceci:
$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);
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']);
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é.
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);
public function store( UserStoreRequest $request ) {
$input = $request->all();
$user = User::create($input);
$userId=$user->id
}
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