2015-07-11 48 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()」 中的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); 
} 

真的一個不能remenber爲什麼我使用這種方法,我soppose不使用Sentry :: getUser在我的代碼,如果在某個時候,我會用另一個你ser的圖書館。

謝謝:)

+1

而不是做:'回報用戶:: where('id',$ user_id) - > join_books',嘗試做'返回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

相關問題