【问题标题】:Return new id with DB::insert() in Laravel 4在 Laravel 4 中使用 DB::insert() 返回新 id
【发布时间】:2013-03-28 08:28:32
【问题描述】:

在 Laravel 4 中,当你执行 DB::insert() 时,如何获取刚刚插入的行的 ID?类似于我们使用函数->insertGetId()。使用DB::insert() 的原因是它是一个复杂的 PostgreSQL 查询,无法使用 Fluent 构建。

示例查询:

$newId = DB::insert('insert into users (id, name) values (?, ?)', array(1, 'Dayle'));
echo $newId; // returns 1

【问题讨论】:

    标签: laravel laravel-4


    【解决方案1】:

    答案有点晚了,但我认为对于 psql 最好使用原生 RETURNING id

    对我有用的查询是:

    DB::select(
        DB::raw('insert into threads (created_at, updated_at) values (?, ?) 
        returning id'), [Carbon::now(), Carbon::now()]
    );
    

    【讨论】:

    • 我发现的唯一解决方案可以用于 Laravel 6.x + PgSQL 11.6 中的多个插入...
    【解决方案2】:

    有一个 insertGetId 方法。

    $id = DB::table('users')->insertGetId(
        array('id' => 1, 'name' => 'Dayle Rees')
    );
    

    【讨论】:

    • 谢谢,但我需要将RAW SQL 语句传递给我的数据库,所以使用 Fluent 的 insertGetId 并没有真正的帮助。
    • 啊抱歉我错过了那部分。
    • 很好,有帮助。谢谢。
    • 虽然这是一种获取 id 的方法,但它不符合问题的标准。
    【解决方案3】:

    有一个insertGetId()方法,如下:

    $dataset = array('column_id' => 1, 'name' => 'Dayle');
    $column_id = DB::table('users')->insertGetId($dataset,'column_id');
    

    【讨论】:

      【解决方案4】:

      如果结构复杂,最好使用 Eloquent。

      最好的东西是您需要查看文档:

      http://laravel.com/docs/eloquent

      【讨论】:

      • 在查询术语中,你可以用 Eloquent 做一些你不能用 Fluent 做的事情,用 Eloquent 做这件事通常更方便。
      • 当然你可以做所有。但是基于类的数​​据库结构是有意义的,并且将来易于重构..
      • 是的,但不是真正的答案。在我的情况下(也许是 OP 的)Eloquent 将不得不做很多数据库调用,我可以在一个 SQL 查询中完成同样的事情。
      【解决方案5】:

      将数据保存到数据库后,您只需调用$insertedId = $user->id;,其中在步骤之前调用$user->save()

      更多信息here

      【讨论】:

        【解决方案6】:

        如果您查看Illuminate\Database\ConnectionInterface,您可以了解这些函数是如何编写的。不幸的是,DB::insert()PDOStatement::execute() 返回一个布尔值,目前没有DB::insertGetId()。如果这有用,那么您应该在 GitHub 上请求它。

        与此同时,您应该可以使用DB::getPdo()->lastInsertId()

        【讨论】:

        • 谢谢菲尔,这是问题的实际答案!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-27
        • 1970-01-01
        • 1970-01-01
        • 2013-10-09
        • 2016-12-31
        • 2013-05-11
        • 2019-10-14
        相关资源
        最近更新 更多