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!
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);
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();
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);
}
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
]);
**** 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 ;
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;
}
}
Cela a fonctionné pour moi dans laravel 4.2
$id = User::insertGetId([
'username' => Input::get('username'),
'password' => Hash::make('password'),
'active' => 0
]);
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 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.');
}
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
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
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
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);
}
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 insert ()
Example:
$ data1 = array ( 'company_id' => $ company_id, 'branch_id' => $ branch_id );
$insert_id = CreditVoucher::insert($data1);
$id = DB::getPdo()->lastInsertId();
dd($id);
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)
Tu peux le faire:
$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);
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.
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();
}
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é.
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);
La méthode optionnelle sera:
$lastID = DB::table('EXAMPLE-TABLE')
->orderBy('id', 'desc')
->first();
$lastId = $lastProduct->id;
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);
}
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]']);