2015-07-11 3 views
0

Я пытаюсь угадать, что в этом коротком коде, чем отличается, но я не могу. Один работает другой возвращается:Laravel «тот же» код разные результаты

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()" в заявлении, если и использовать, если (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 в своем коде, если в какой-то момент я буду использовать другой u ser.

Спасибо :)

+1

Вместо того чтобы делать: 'Возвращение пользователя :: where ('id', $ user_id) -> join_books', попробуйте выполнить 'return User :: where ('id', $ user_id) -> first() -> join_books'. Кажется, что вы извлекаете коллекцию вместо одного экземпляра. – Mindastic

ответ

2

Проблема эта часть кода:

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

Я полагаю, вы хотели бы использовать что-то вроде:

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

Спасибо, много часов перед ПК, конечно, вы знаете, о чем я говорю;) – kikerrobles

Смежные вопросы