雄辩的 lastInsertId

Posted

技术标签:

【中文标题】雄辩的 lastInsertId【英文标题】:Eloquent lastInsertId 【发布时间】:2016-08-09 14:51:33 【问题描述】:

我想获取插入到两个表中的“loan_id”。

return $this->getConnection()->getPdo()->lastInsertId(); 我想我应该至少得到最后一个 id(为此模型指定为“id”并自动递增),但我也没有收到它。 (只是空响应)

如果我能得到插入数据库的完整对象,那就更好了。

所以,我想在事务失败时捕获异常,并在失败的情况下返回错误消息,在成功的情况下返回 $loan_id 或保存的对象。怎么办?

<?php
namespace App\model;

use Illuminate\Database\Eloquent\Model as Eloquent;
//use Illuminate\Support\Facades\DB as DB;
use Illuminate\Support\Manager as Manager;
use Illuminate\Database\Capsule\Manager as DB;
use PDO;

class Loan extends Eloquent

    protected $table = 'loans';

    protected $primaryKey = 'id';

    public $timestamps = false;

    public function addLoan($amount, $instalments)
    

        // Manager::connection()->getPdo()->beginTransaction();
        $this->getConnection()->transaction(function () use ($amount)
        
            $loan_id = substr(uniqid(), -12);

            DB::table('loans')->insert([
                    'loan_id' => $loan_id,
                    'amount' => $amount,
                    'status' => 'requested'
                ]
            );

            DB::table('loan_instalment')->insert([
                    'loan_id' => $loan_id,
                    'principal' => 777.12,
                    'interest' => 333.12
                ]
            );

        );

        return $this->getConnection()->getPdo()->lastInsertId();
    

?>

【问题讨论】:

你有两个插入。您只能从 loan_instalment 获取 id,因为 last_insert() 从最后一次执行的插入中只返回一个 id。 是的,我明白这一点。但我没有得到任何身份证 【参考方案1】:

代替

$this->getConnection()->getPdo()->lastInsertId()

你可以这样做:

DB::table('table')->insert([...])->lastInsertId();

捕捉异常见:Laravel: Using try...catch with DB::transaction()

【讨论】:

insert->lastInsertId() 不起作用。而不是插入这个工作: insertGetId lastInsertId和insertGetId在insert([]...)之后都不能流畅调用。

以上是关于雄辩的 lastInsertId的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 雄辩的极限查询

Laravel 雄辩的一对一通过(级别/树)关系

为啥 laravel 雄辩的关系返回空数组

带有雄辩查询的 Laravel 分页

雄辩的查询转换为浮动

Laravel 雄辩加入 ajax