无法访问受保护的属性Illuminate \ Database \ MySqlConnection :: $ pdo

时间:2013-06-19 22:40:15

标签: php pdo laravel laravel-4

这是什么错误以及如何捕获它?

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

2 个答案:

答案 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();