Dapatkan Id Terakhir Dimasukkan Menggunakan Laravel Eloquent

294

Saat ini saya menggunakan kode di bawah ini untuk memasukkan data dalam tabel:

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

Saya ingin mengembalikan ID terakhir yang dimasukkan tetapi saya tidak tahu bagaimana cara mendapatkannya.

Salam!

SoldierCorp
sumber

Jawaban:

378

Setelah menyimpan , $data->idseharusnya id terakhir dimasukkan.

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

Bisa digunakan seperti ini.

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

Untuk versi laravel yang diperbarui, coba ini

return response()->json(array('success' => true, 'last_insert_id' => $data->id), 200);
xdazz
sumber
2
Objek selalu mengembalikan objek, ofc. Ini satu-satunya cara untuk pergi.
Cas Bloem
40
Hati-hati bahwa jika id BUKAN autoincrement, ini akan selalu kembali 0. Dalam kasus saya id adalah string (UUID) dan agar ini berfungsi saya harus menambahkan public $incrementing = false;model saya.
Luís Cruz
2
@milz Saya memiliki pemicu MySQL yang menghasilkan uuid untuk bidang kustom bernama aiddan saya telah mengatur $incrementing = false;tetapi tidak kembali juga!
SaidbakR
@SaidbakR sementara benar, bisakah Anda menunjukkan bagian dokumen Laravel di mana Anda mendapatkan informasi yang sangat penting ini?
Damilola Olowookere
@DamilolaOlowookere Ini adalah apa yang saya temukan di aplikasi saya yang menggunakan Laravel 5.4.
SaidbakR
121

xdazz benar dalam hal ini, tetapi untuk kepentingan pengunjung masa depan yang mungkin menggunakan DB::statementatau DB::insert, ada cara lain:

DB::getPdo()->lastInsertId();
Benubird
sumber
43
Sebenarnya Anda bisa melakukannya dengan benar di sisipan$id = DB::table('someTable')->insertGetId( ['field' => Input['data']);
Casey
1
@Casey melakukannya dengan cara ini tidak akan memperbarui stempel waktu di DB
Rafael
@ Rafael, jika Anda ingin memperbarui timestampsmenggunakan insertGetId, silakan cek di sini
Frank Myat Thu
Persis seperti yang saya cari kemarin! Juga, insertGetIdhanya berfungsi jika kolom id sebenarnya disebut "id".
Kapten Hypertext
@ Benubird, saya sudah mendapat solusi sesuai jawaban Anda.
Bhavin Thummar
58

Bagi siapa pun yang juga menyukai cara Jeffrey Way menggunakan Model::create()dalam tutorial Laracasts 5-nya, di mana ia hanya mengirim Permintaan langsung ke dalam basis data tanpa secara eksplisit mengatur setiap bidang dalam pengontrol, dan menggunakan model $fillableuntuk tugas massal (sangat penting, bagi siapa pun yang baru dan menggunakan begini): Saya membaca banyak orang menggunakan insertGetId()tetapi sayangnya ini tidak menghormati $fillabledaftar putih sehingga Anda akan mendapatkan kesalahan dengan mencoba memasukkan _token dan apa pun yang bukan bidang dalam database, akhirnya mengatur hal-hal yang ingin Anda filter, dll. Itu membuat saya kesal, karena saya ingin menggunakan penugasan massal dan secara keseluruhan menulis lebih sedikit kode bila memungkinkan. Untungnya createmetode Eloquent hanya membungkus metode penyimpanan (apa yang disebutkan oleh @xdazz di atas), sehingga Anda masih dapat menarik ID yang terakhir dibuat ...

public function store() {

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

    return redirect('company/'.$id);
}
dave
sumber
2
Contoh ini tidak berfungsi untuk saya di 5.1, tetapi ini berhasil:$new = Company::create($input); return redirect('company/'.$new->id);
timgavin
2
Ini mengasumsikan bahwa nama bidang permintaan sama dengan kolom basis data masing-masing. Yang tidak selalu terjadi (misalnya kode warisan) ..
mosid
48

Jika tabel memiliki id penambahan otomatis, gunakan metode insertGetId untuk menyisipkan catatan dan kemudian ambil ID:

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

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

Aamir
sumber
Apa yang Anda gambarkan tampak seperti menangkap insert terakhir menggunakan Fluent. Pertanyaannya adalah tentang Eloquent. Akan terlihat lebih seperti: $ id = Model :: create ('votes' => 0]) -> id; Seperti dijelaskan dalam jawaban di atas: stackoverflow.com/a/21084888/436443
Jeffz
46

**** Untuk Laravel ****

Pertama-tama buat objek, Kemudian atur nilai atribut untuk objek itu, Lalu simpan catatan objek, dan kemudian dapatkan id yang disisipkan terakhir. seperti

$user = new User();        

$user->name = 'John';  

$user->save();

// Sekarang Mendapatkan id yang Terakhir Disisipkan

$insertedId = $user->id;

echo $insertedId ;
Majbah Habib
sumber
16

Di laravel 5: Anda bisa melakukan ini:

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;
    }
}
Mujibur
sumber
15

Ini sebuah contoh:

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);
}
ngakak
sumber
15

Ini bekerja untuk saya di laravel 4.2

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

Berikut ini cara mendapatkan id yang dimasukkan terakhir di 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.');
    }
Qamar Uzman
sumber
11

Gunakan insertGetIduntuk memasukkan dan dimasukkan idpada saat yang sama

Dari dok

Jika tabel memiliki id penambahan otomatis, gunakan metode insertGetId untuk menyisipkan catatan dan kemudian ambil ID:

Oleh Model

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

Oleh DB

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

Untuk detail lebih lanjut: https://laravel.com/docs/5.5/queries#inserts

Niklesh Raut
sumber
6

Setelah menyimpan model, instance yang diinisialisasi memiliki 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
Amir
sumber
6

Untuk memasukkan ()

Contoh:

$data1 = array(
         'company_id'    => $company_id,
         'branch_id'        => $branch_id
     );

$insert_id = CreditVoucher::insert($data1);
$id = DB::getPdo()->lastInsertId();
dd($id);
Faridul Khan
sumber
3

Dalam Laravel 5.2 saya akan membuatnya sebersih mungkin:

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

Setelah

$data->save()

$data->id akan memberi Anda id yang dimasukkan,

Catatan: Jika nama kolom autoincrement Anda adalah sno maka Anda harus menggunakan $data->snodan tidak$data->id

Abhishek Goel
sumber
2

Setelah menyimpan catatan dalam basis data, Anda dapat mengakses id dengan$data->id

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

Untuk Laravel, Jika Anda memasukkan catatan baru dan memanggil $data->save()fungsi ini, jalankan permintaan INSERT dan kembalikan nilai kunci utama (mis. Id secara default).

Anda dapat menggunakan kode berikut:

if($data->save()) {
    return Response::json(array('status' => 1, 'primary_id'=>$data->id), 200);
}
Tank Tua
sumber
2
$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);
Kamal Maisuriya
sumber
1

Kamu bisa melakukan ini:

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

$lastInsertId=app('db')->getPdo()->lastInsertId();
Dnyaneshwar Harer
sumber
1

Untuk mendapatkan id yang dimasukkan terakhir dalam database, Anda dapat menggunakan

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

di sini $ lastInsertedId akan memberi Anda id kenaikan otomatis yang dimasukkan terakhir.

PPL
sumber
1

Cara terpendek mungkin adalah panggilan refresh()pada model:

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

Meskipun pertanyaan ini agak tanggal. Solusi cepat dan kotor saya akan terlihat seperti ini:

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

Tapi saya kira itu rentan terhadap kondisi balapan pada database yang sangat sering dikunjungi.

dustypaw - Pasang kembali Monica
sumber
1
Terima kasih! Ini bisa saya gunakan dalam pipa saya. Jadi jangan khawatir tentang kondisi balapan dan kode yang indah.
Daantje
1

Anda juga dapat mencoba seperti ini:

public function storeAndLastInrestedId() {
    $data = new ModelName();
    $data->title = $request->title;
    $data->save();

    $last_insert_id = $data->id;
    return $last_insert_id;
}
Rasheduzzaman
sumber
0

Menggunakan Model Eloquent

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

Menggunakan Pembuat Kueri

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

Setelah Menyimpan $data->save(). semua data didorong masuk $data. Karena ini adalah objek dan baris saat ini baru saja disimpan di dalam $data. jadi yang terakhir insertIdakan ditemukan di dalam $data->id.

Kode respons akan:

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

Metode opsional adalah:

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

$lastId = $lastProduct->id;

Sumber dari Laravel versi 5.8

Gustavo Morillo Marin
sumber
0

Anda bisa mendapatkan id yang dimasukkan terakhir dengan objek yang sama dengan yang Anda sebut metode simpan;

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

Jadi Anda cukup menulis:

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

Anda dapat dengan mudah mengambil Id rekaman yang dimasukkan terakhir

$user = User::create($userData);
$lastId = $user->value('id');

Ini adalah trik yang luar biasa untuk mengambil Id dari catatan yang dimasukkan terakhir di DB.

Priyanka Patel
sumber
dua pengguna bersamaan menambahkan ke model perusahaan pada saat yang sama. ini tidak dapat diandalkan karena posting pertama mungkin mendapatkan id ke-2 jika waktunya tepat. jawaban yang diterima dapat diandalkan.
Alex
@Alex silakan periksa, ini berfungsi dan solusi terbaik untuk mendapatkan id yang dimasukkan terakhir dari catatan.
Priyanka Patel
solusi yang diperbarui baik-baik saja, namun membutuhkan lebih banyak kode daripada jawaban yang diterima. Cukup melakukan $user->idcukup setelah membuat untuk mendapatkan id yang dimasukkan.
Alex
-1
public function store( UserStoreRequest $request ) {
    $input = $request->all();
    $user = User::create($input);
    $userId=$user->id 
}
akun sementara
sumber
2
Posting ini dijawab 3 tahun yang lalu. Harap edit jawaban Anda untuk menambahkan lebih banyak penjelasan mengapa itu dapat membantu pengguna atau bagaimana bantuannya memecahkan pertanyaan OP dengan cara yang lebih baik.
Syfer
1
Terima kasih atas cuplikan kode ini, yang dapat memberikan bantuan segera. Penjelasan yang tepat akan sangat meningkatkan nilai pendidikannya dengan menunjukkan mengapa ini adalah solusi yang baik untuk masalah ini, dan akan membuatnya lebih bermanfaat bagi pembaca masa depan dengan pertanyaan yang serupa, tetapi tidak sama. Harap edit jawaban Anda untuk menambahkan penjelasan, dan berikan indikasi batasan dan asumsi apa yang berlaku. Belum lagi usia pertanyaan dan rendahnya kualitas jawaban Anda.
GrumpyCrouton
-1

Menggunakan Model 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;

}

Menggunakan Pembuat Kueri

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

Untuk metode lainnya untuk mendapatkan id Baris Terakhir Dimasukkan di Laravel: http://phpnotebook.com/95-laravel/127-3-methods-to-get-last-inserted-row-id-in-laravel

Karthik
sumber
-1

Anda dapat menggunakan $thisvariabel konstruktor untuk mencapai "Id Terakhir Dimasukkan Menggunakan Laravel Eloquent" (tanpa menambahkan kolom tambahan) dalam fungsi atau pengontrol saat ini.

public function store(Request $request){
    $request->validate([
        'title' => 'required|max:255',
        'desc' => 'required|max:5000'
    ]);

    $this->project = Project::create([
        'name' => $request->title,
        'description' => $request->desc,
    ]);

    dd($this->project->id);  //This is your current/latest project id
    $request->session()->flash('project_added','Project added successfully.');
    return redirect()->back();

}
WebGhost
sumber