2013-06-19 58 views
2

這是什麼錯誤以及如何捕獲它?

Cannot access protected property Illuminate\Database\MySqlConnection::$pdo 

繼承人我的代碼:

if($user->save()) 
     { 
      try 
      { 
       DB::connection()->pdo->beginTransaction(); 

       Mymodel::insert('credit-card',array('user_id'=>$user->id,'card_holder'=>Input::get('custname'))); 
       Mymodel::insert('billing-info',array('user_id'=>$user->id,'name'=>Input::get('custname'))); 

       DB::connection()->pdo->commit(); 

       Auth::login($user); 
       return Redirect::to('profile'); 
      } 
      catch (\PDOException $e) 
      { 
       $user->delete(); 
       DB::connection()->pdo->rollBack(); 
       return 'ERROR: Something went wrong. Please try again later'; 
      } 
     } 

回答

3

怎麼抓呢?

你無法捕捉它 - Exceptions是可捕捉的,這是一個普通的錯誤。

這是什麼錯誤

這裏:

DB::connection()->pdo->beginTransaction(); 

您試圖直接訪問由DB::connection()返回的對象的pdo財產。此屬性被聲明爲受保護的,以防止直接訪問它並以可能導致整個框架出現不可預知行爲的方式進行操作。

quick look at source code它看起來該交易可以實現這樣的:

DB::connection()->transaction(function() use($user){ 
    Mymodel::insert('credit-card',array('user_id'=>$user->id,'card_holder'=>Input::get('custname'))); 
    Mymodel::insert('billing-info',array('user_id'=>$user->id,'name'=>Input::get('custname'))); 
}); 
+0

我也打算做這種方法,但是我在'catch'部分後面可以顯示錯誤消息。什麼是適當的方式來執行你的代碼? REF:[http://laravelish.wordpress.com/2013/02/21/how-to-make-database-transaction-with-laravel/] – Orvyl

+0

你try/catch塊可以留下來,用'爲MyModel拋出的每個異常:: insert'將被重新拋出,你可以捕獲它。從它中刪除'DB :: connection() - > pdo-> rollBack();'。另外請注意,您引用的文章標記爲'laravel-3' - 很可能它已在新版本中更改。 –

+0

我明白了。謝謝 – Orvyl

0

您還可以在每個語句中使用getPdo()代替PDO監守PDO的 屬性現在保護。使用getPdo()方法獲取它。

DB::connection()->getPdo()->beginTransaction(); 
........ 
........ 
DB::connection()->getPdo()->commit(); 
...... 
...... 
DB::connection()->getPdo()->rollBack(); 
相關問題