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';
            }
        }
4

2 回答 2

3

怎么抓?

你无法捕捉到它 -Exceptions是可以捕捉到的,这是一个普通的错误。

这是什么错误

这里:

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

您正在尝试直接访问pdoDB::connection(). 此属性被声明为受保护以防止直接访问它并以可能导致整个框架的不可预测行为的方式进行操作。

快速查看源代码来看,事务可以这样实现:

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')));
});
于 2013-06-19T23:13:55.907 回答
1

您还可以在每个语句中使用 getPdo() 代替 pdo,因为 pdo 属性现在受到保护。使用 getPdo() 方法获取它。

DB::connection()->getPdo()->beginTransaction();
 ........
 ........
DB::connection()->getPdo()->commit();
......
......
DB::connection()->getPdo()->rollBack();
于 2015-03-31T10:06:51.330 回答