Laravel"相同"代码不同的结果

时间:2015-07-11 15:09:05

标签: laravel undefined

我试图猜测这段短代码有什么不同,但我不能。一个工作,另一个工作返回:

Undefined property: Illuminate\Database\Eloquent\Builder::$join_books 

第一种方法,这个抛出错误:

public function selectBook(){
    try{
        BookUser::create(Input::all());
        if(!BookUser::userJoinBooks()){
            $user = User::eloquentUser();
            $user->join_books = 1;
            $user->save();
        }
        MyHelpers::sendSessionFlashMessages('El libro ha sido seleccionado', 'bg-success');
    }
    catch (Exception $e) {
        $message = MyHelpers::exceptionCatch($e);
        MyHelpers::sendSessionFlashMessages($message['message'], $message['css-class']);
    }
    return Redirect::back();
}

在此之后的两行我有取消选择方法,看起来像是一样,但工作正常:

public function unselectBook(){
    try{
        $book_user = BookUser::find(Input::get('id'));
        $book_user->delete();
        if(BookUser::userBooksCount() == 0){
            $user = User::eloquentUser();
            $user->join_books = 0;
            $user->save();
        }
        MyHelpers::sendSessionFlashMessages('El libro ha sido eliminado', 'bg-success');
    }
    catch (Exception $e) {
        $message = MyHelpers::exceptionCatch($e);
        MyHelpers::sendSessionFlashMessages($message['message'], $message['css-class']);
    }
    return Redirect::back();
}

如果我从SelectBook方法中移除"!BookUser :: userJoinBooks()"在if语句中使用if(1)例如,它可以工作。我不明白为什么如果我在这个静态方法之后使$ user asigment它可能会影响它。

这是静态方法代码:

public static function userJoinBooks($id = null){
    $user_id = $id === null ? Sentry::getUser()->getId(): $id;
    return User::where('id',$user_id)->join_books == 0 ? false : true;
}

另一个也可能有所帮助:

 public static function userBooksCount($id = null){
    $user_id = $id === null ? Sentry::getUser()->getId(): $id;
    return BookUser::where('user_id',$user_id)->count();
}

这是eloquentUser方法:

public  static function eloquentUser(){
    $sentry_user = Sentry::getUser();
    return $user = User::findOrFail($sentry_user->id);
}

真的不知道为什么我会使用这种方法,我不会在我的代码中使用Sentry :: getUser,如果在某些时候我会使用其他用户的库。

谢谢:)

1 个答案:

答案 0 :(得分:2)

问题在于您的代码的这一部分:

return User::where('id',$user_id)->join_books == 0 ? false : true;

我想你会想要使用类似的东西:

return User::findOrFail($user_id)->join_books == 0 ? false : true;