2016-08-09 6 views
1

両方のテーブルに挿入された 'loan_id'を取得したいとします。Eloquent lastInsertId

return $this->getConnection()->getPdo()->lastInsertId(); 私は少なくとも最後のID(これは 'id'とautoincrementedとしてこのモデルに指定されています)を取得する必要があると思いますが、それも受け取りません。 (ちょうど空のレスポンス)

DBに挿入された完全なオブジェクトを取得できれば、さらに優れています。

したがって、トランザクションが失敗した場合は例外をキャッチし、失敗した場合はエラーメッセージを返し、成功した場合は$ loan_idまたは保存されたオブジェクトを返します。どうやってするの ?

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

を、例外キャッチ参照:

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

次の2つのインサートを持っています。 last_insert()は、実行された最後の挿入から1つのIDだけを返すので、 'loan_instalment'からIDを取得することができます。 –

+0

はい、私はそれを理解しています。しかし、私はidを取得しません –

答えて

1

代わり

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

のあなたはこれを行うことができますLaravel: Using try...catch with DB::transaction()

+0

insert-> lastInsertId()は動作しませんでした。これを挿入するのではなく、insertGetId –