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

Sol*_*orp 260 php database 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想返回插入的最后一个ID,但我不知道如何获取它.

亲切的问候!

xda*_*azz 342

之后save,$data->id应该是最后插入的id.

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

有关更新的laravel版本,请尝试此操作

return response()->json(array('success' => true, 'last_insert_id' => $data->id), 200);
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果id不是自动递增,则始终返回"0".在我的情况下,id是一个字符串(UUID),为此我必须在我的模型中添加`public $ incrementing = false;`. (35认同)
  • 一个对象总是返回一个对象,ofc。这是唯一的出路。 (2认同)
  • @milz我有MySQL触发器,为名为`aid`的自定义字段生成uuid,并且我设置了`$ incrementing = false;`但它也没有返回! (2认同)

Ben*_*ird 114

xdazz就在这种情况下,但对于谁可能使用未来游客的利益DB::statement或者DB::insert,还有另一种方式:

DB::getPdo()->lastInsertId();
Run Code Online (Sandbox Code Playgroud)

  • 实际上你可以在插入`$ id = DB :: table('someTable') - > insertGetId(['field'=> Input ['data']); (31认同)

dav*_*ave 55

对于那些也喜欢Jeffrey Way Model::create()在他的Laracasts 5教程中使用的人,他只需将Request直接发送到数据库而无需在控制器中明确设置每个字段,并使用模型$fillable进行质量分配(对于任何新的和使用的人来说非常重要)这种方式):我读了很多人使用insertGetId()但不幸的是,这不尊重$fillable白名单,所以你会在尝试插入_token和任何不是数据库中的字段时出错,最终设置你想要的东西这让我感到很失望,因为我想尽可能使用质量分配和整体编写更少的代码.幸运的是,Eloquent的create方法只包含了save方法(上面引用的@xdazz),所以你仍然可以提取最后创建的ID ...

public function store() {

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

    return redirect('company/'.$id);
}
Run Code Online (Sandbox Code Playgroud)

  • 这个例子在5.1中对我不起作用,但这样做:`$ new = Company :: create($ input);``return redirect('company /'.$ new-> id);` (2认同)
  • 这假设请求字段名称与其各自的数据库列相同。情况并非总是如此(例如,遗留代码)。 (2认同)

Maj*_*bib 42

****对于Laravel****

首先创建一个对象,然后为该对象设置属性值,然后保存对象记录,然后获取最后插入的id.如

$user = new User();        

$user->name = 'John';  

$user->save();
Run Code Online (Sandbox Code Playgroud)

//现在获取最后插入的ID

$insertedId = $user->id;

echo $insertedId ;
Run Code Online (Sandbox Code Playgroud)


Aam*_*mir 42

如果表具有自动递增ID,请使用insertGetId方法插入记录,然后检索ID:

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

请参阅:https://laravel.com/docs/5.1/queries#inserts


Muj*_*bur 16

在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;
    }
}
Run Code Online (Sandbox Code Playgroud)


nga*_*kak 13

这是一个例子:

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);
}
Run Code Online (Sandbox Code Playgroud)


use*_*864 13

这在laravel 4.2中对我有用

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


小智 11

以下是我们如何在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.');
    }
Run Code Online (Sandbox Code Playgroud)


Nik*_*aut 10

使用insertGetId插入和获得插入id在同一时间

来自doc

如果表具有自动递增ID,请使用insertGetId方法插入记录,然后检索ID:

通过 Model

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

通过 DB

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

有关更多详细信息,请访问:https://laravel.com/docs/5.5/queries#inserts


Far*_*han 10

对于插入()

例子:

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

$insert_id = CreditVoucher::insert($data1);
$id = DB::getPdo()->lastInsertId();
dd($id);
Run Code Online (Sandbox Code Playgroud)


Abd*_*inu 9

有几种方法可以获取最后插入的 id。一切都基于您在插入时使用的方法。在您的情况下,您可以获得如下所示的最后一个 ID:

$data->save();
$data->id;
Run Code Online (Sandbox Code Playgroud)

对于需要知道如果他们使用其他插入方法如何获得最后插入的 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/


Pri*_*tel 7

您可以轻松获取最后插入的记录 ID

$user = User::create($userData);
$lastId = $user->value('id');
Run Code Online (Sandbox Code Playgroud)

从数据库中最后插入的记录中获取 Id 是一个很棒的技巧。

  • 这正是我在 Eloquent 上想要的答案 (2认同)

Ami*_*mir 6

保存模型后,初始化的实例具有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
Run Code Online (Sandbox Code Playgroud)


小智 6

虽然这个问题有点过时了。我的快速而肮脏的解决方案如下所示:

$last_entry = Model::latest()->first();
Run Code Online (Sandbox Code Playgroud)

但我想它很容易受到频繁访问的数据库的竞争条件的影响。