2016-08-09 24 views
1

Ich möchte 'loan_id' bekommen, die in beiden Tabellen eingefügt wurde.Eloquent lastInsertId

Mit return $this->getConnection()->getPdo()->lastInsertId(); Ich denke, ich sollte mindestens letzte ID (die für dieses Modell als 'ID' und Autoincremented angegeben ist), aber ich bekomme es auch nicht. (nur leere Antwort)

Noch besser, wenn ich volles Objekt bekommen kann, das in DB eingefügt wurde.

Also, ich wollte eine Ausnahme abfangen, wenn die Transaktion fehlschlägt und Fehlermeldung im Falle eines Fehlers und $ loan_id oder gespeicherten Objekt im Erfolgsfall zurückgeben. wie es geht ?

<?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

Sie haben zwei Einsätze. Sie könnten die ID immer nur von "loan_instalment" erhalten, da last_insert() nur eine einzige ID von der letzten durchgeführten Eingabe zurückgibt. –

+0

Ja, das verstehe ich. Aber ich bekomme keine ID –

Antwort

1

Statt

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

Sie können dies tun:

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

und Fangen einer Ausnahme siehe: Laravel: Using try...catch with DB::transaction()

+0

insert-> lastInsertId() hat nicht funktioniert. Anstatt einzufügen funktionierte das: insertGetId –