我試圖猜測這短代碼有什麼不同,但我不能。一期工程的另外一個收益: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的圖書館。
謝謝:)
而不是做:'回報用戶:: where('id',$ user_id) - > join_books',嘗試做'返回User :: where('id',$ user_id) - > first() - > join_books'。看來你正在檢索一個集合,而不是一個實例。 – Mindastic