这是什么错误以及如何捕获它?
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';
}
}
答案 0 :(得分:3)
怎么抓住它?
你无法捕捉它 - Exceptions
是可捕捉的,这是一个普通的错误。
这是什么错误
下面:
DB::connection()->pdo->beginTransaction();
您正在尝试直接访问pdo
返回的对象的DB::connection()
属性。此属性声明为受保护,以防止直接访问它并以可能导致整个框架的不可预测行为的方式进行操作。
从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')));
});
答案 1 :(得分:0)
你也可以在每个语句中使用getPdo()而不是pdo,因为它们是pdo 财产现在受到保护。通过使用getPdo()方法获取它。
DB::connection()->getPdo()->beginTransaction();
........
........
DB::connection()->getPdo()->commit();
......
......
DB::connection()->getPdo()->rollBack();