簡體   English   中英

使用 Laravel Eloquent 獲取最后插入的 ID

[英]Get the Last Inserted Id Using Laravel Eloquent

我目前正在使用以下代碼在表中插入數據:

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

我想返回最后插入的 ID,但我不知道如何獲取它。

親切的問候!

save之后, $data->id應該是最后插入的 id。

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

可以這樣使用。

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

對於更新的 Laravel 版本試試這個

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

xdazz在這種情況下是正確的,但為了將來可能使用DB::statementDB::insert訪問者的利益,還有另一種方法:

DB::getPdo()->lastInsertId();

對於那些也喜歡 Jeffrey Way 在他的 Laracasts 5 教程中如何使用Model::create() ,他只是將請求直接發送到數據庫中,而沒有明確設置控制器中的每個字段,並使用模型的$fillable進行批量分配(非常重要,對於任何新手和使用這種方式的人):我讀了很多人使用insertGetId()但不幸的是這不尊重$fillable白名單,所以你會在嘗試插入 _token 和任何不是的時候出錯數據庫中的一個字段,最終設置要過濾的內容等。這讓我很沮喪,因為我想使用批量分配並在可能的情況下整體編寫更少的代碼。 幸運的是,Eloquent 的create方法只是包裝了 save 方法(上面引用的@xdazz),所以你仍然可以拉取最后創建的 ID...

public function store() {

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

    return redirect('company/'.$id);
}

如果表有自動遞增的 id,則使用 insertGetId 方法插入一條記錄,然后檢索該 ID:

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

參考: https : //laravel.com/docs/5.1/queries#inserts

**** 對於 Laravel ****

首先創建一個對象,然后為該對象設置屬性值,然后保存對象記錄,然后獲取最后插入的id。

$user = new User();        

$user->name = 'John';  

$user->save();

// 現在獲取最后插入的 id

$insertedId = $user->id;

echo $insertedId ;

在laravel 5:你可以這樣做:

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

這在 Laravel 4.2 中對我有用

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

下面是一個例子:

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

使用insertGetId同時插入和獲取插入的id

來自文檔

如果表有自動遞增的 id,則使用 insertGetId 方法插入一條記錄,然后檢索該 ID:

Model

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

DB

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

更多詳情: https : //laravel.com/docs/5.5/queries#inserts

這是我們如何在 Laravel 4 中獲取最后插入的 id

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

對於插入()

例子:

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

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

有幾種方法可以獲取最后插入的 id。 一切都基於您在插入時使用的方法。 在您的情況下,您可以獲得如下所示的最后一個 ID:

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

對於需要知道如果他們使用其他插入方法如何獲得最后插入的 id 的其他人,方法如下:

  • 使用create()方法

    $book = Book::create(['name'=>'Laravel Warrior']);

    $lastId = $book->id;

  • 使用insertGetId()

    $id = DB::table('books')->insertGetId( ['name' => 'Laravel warrior'] ); $lastId = $id;

  • 使用lastInsertId()方法

    $lastId = DB::getPdo()->lastInsertId();

參考https://easycodesolution.com/2020/08/22/last-inserted-id-in-laravel/

保存模型后,初始化的實例具有 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

雖然這個問題有點過時了。 我的快速而骯臟的解決方案如下所示:

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

但我想它很容易受到頻繁訪問的數據庫的競爭條件的影響。

在 Laravel 5.2 中,我會使其盡可能干凈:

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

$data->save()

$data->id會給你插入的 id,

注意:如果您的自動增量列名稱是sno那么您應該使用$data->sno而不是$data->id

你可以這樣做:

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

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

您可以輕松獲取最后插入的記錄 ID

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

從數據庫中最后插入的記錄中獲取 Id 是一個很棒的技巧。

節省數據庫中的記錄后,您可以通過訪問ID $data->id

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

對於 Laravel,如果你插入一條新記錄並調用$data->save()這個函數會執行一個 INSERT 查詢並返回主鍵值(即默認的id )。

您可以使用以下代碼:

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

獲取數據庫中最后插入的 id 您可以使用

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

這里 $lastInsertedId 會給你最后插入的自動增量 id。

最短的方法可能是在模型上調用refresh()

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

你也可以這樣試試:

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

    $last_insert_id = $data->id;
    return $last_insert_id;
}

這就是它對我的工作方式,family_id 是具有自動增量的主鍵我正在使用 Laravel7

    public function store(Request $request){
        $family = new Family();
        $family->family_name = $request->get('FamilyName');
        $family->family_no = $request->get('FamilyNo');
        $family->save();
        //family_id is the primary key and auto increment
        return redirect('/family/detail/' .  $family->family_id);
    }

同樣在擴展模型的模型族文件中,應該將增量設置為 true 否則上面的 $family-->family_id 將返回空

    public $incrementing = true;
  

保存$data->save() 所有數據都被推入$data 由於這是一個對象,並且當前行最近剛剛保存在$data 所以最后一個insertId將在$data->id

響應代碼將是:

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

使用 Eloquent 模型

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

使用查詢生成器

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

可選方法是:

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

$lastId = $lastProduct->id;

來自 Laravel 5.8 版本

您可以使用調用 save 方法的相同對象獲取最后插入的 id;

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

所以你可以簡單地寫:

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

您可以使用$this構造函數變量在當前函數或控制器中實現“使用Laravel Eloquent的最后插入ID”(不添加任何額外的列)。

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

}
public function store( UserStoreRequest $request ) {
    $input = $request->all();
    $user = User::create($input);
    $userId=$user->id 
}

使用口才模型

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;

}

使用查詢生成器

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

有關在Laravel中獲取最后插入行ID的更多方法: http ://phpnotebook.com/95-laravel/127-3-methods-to-get-last-inserted-row-id-in-laravel

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM