Laravel "same" 编码不同的结果
Laravel "same" code different results
我想猜测这段简短的代码有什么不同,但我猜不到。一个工作另一个 returns:
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();
}
如果我从 if 语句中的 SelectBook 方法“!BookUser::userJoinBooks()”中删除并使用 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,如果在某些时候我会使用另一个用户的库。
谢谢:)
问题是您的这部分代码:
return User::where('id',$user_id)->join_books == 0 ? false : true;
我想你会想使用类似的东西:
return User::findOrFail($user_id)->join_books == 0 ? false : true;
我想猜测这段简短的代码有什么不同,但我猜不到。一个工作另一个 returns:
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();
}
如果我从 if 语句中的 SelectBook 方法“!BookUser::userJoinBooks()”中删除并使用 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,如果在某些时候我会使用另一个用户的库。
谢谢:)
问题是您的这部分代码:
return User::where('id',$user_id)->join_books == 0 ? false : true;
我想你会想使用类似的东西:
return User::findOrFail($user_id)->join_books == 0 ? false : true;