Сериализация Closure не разрешена при запуске paginate

$posts = Post::where('content', 'like', '%'.$keyword.'%')->paginate(5);

когда я использую приведенный выше код Laravel, на странице отображается:

Сериализация «Закрытия» не допускается.

приведенный выше код не может быть написан таким образом, так как документ larvel, похоже, не имеет этой информации.

добавить: когда я меняю его на

$posts = Post::where('content', 'like', '%'.$keyword.'%')->get();

показывает другую ошибку:

Вызов неопределенного метода Illuminate\Database\Eloquent\Collection::links()

Я искал в Интернете, и мне сказали добавить paginate(), который может решить проблему со ссылками на страницы. но все равно не могу

весь код

   public function search(){
        $keyword = Input::get('keyword');
        if(empty($keyword)){
            return Redirect::route('postIndex');
            //->with('message',array('type' => 'alert', 'content' => '不能为空'))
        }
        $posts = Post::where('content', 'like', '%'.$keyword.'%')->paginate(5);
        return Redirect::route('searchResults')->with('posts', $posts);
   }

   public function searchResults(){
     return View::make('frontend.search.search',['posts' => Session::get('posts')]);
   }

мои маршруты:

  Route::post('post/search', array(
    'before' => 'csrf',
    'uses' => 'SearchController@search',
    'as' => 'search'  
  ));
  Route::get('post/searchResults', array(

    'uses' => 'SearchController@searchResults',
    'as' => 'searchResults'  
  ));

Добавлено: почтовая модель

use Illuminate\Database\Eloquent\SoftDeletingTrait;
class Post extends Eloquent{
  use SoftDeletingTrait;
   protected $dates = ['deleted_at'];

  public static $rules = array(

            'title' => 'required|between:2,80',//unique, 参考users表的设置
            'summary' => 'required|between:20,300',
            'content' => 'required|min:50',

              'tags' => 'required|min:2',
    );  

  protected $fillable = ['title', 'content','summary', 'category'];

  public function tags()
  {
    return $this->belongsToMany('Tag');
  }

    public function category()
  {
    return $this->belongsTo('Category');
  }


  public function user()
  {
    return $this->belongsTo('User');
  }

   public function reviews(){
        return $this->hasMany('Review');//Review is the model of Review
   }

   public function getNumCommentsStr()
   {
    $num = $this->reviews()->count();

    return $num;
   }
}

//содержимое формы $keyword:

{{ Form::open(array('url'=>'post/search','method' => 'post','id'=>'search','class'=>'search'))}}
{{ Form::token()}}
<div class="keywordContainer">
{{Form::text('keyword', '', array('id'=>'keyword', 'placeholder'=>'keyword'))}}
<i class="fa fa-search"></i>
</div>
{{ Form::submit('提交',array('class'=>''))}} 
{{Form::close()}}

person franklee    schedule 27.12.2015    source источник
comment
Пожалуйста, покажите содержание $keyword и вашу модель Post   -  person Marcin Nabiałek    schedule 27.12.2015
comment
@ Marcin Nabiałek только что добавил, спасибо   -  person franklee    schedule 27.12.2015
comment
почему вы перенаправляете с этими результатами?   -  person lagbox    schedule 27.12.2015


Ответы (1)


Я думаю, что проблема здесь:

return Redirect::route('searchResults')->with('posts', $posts);

Попробуйте изменить его с помощью:

return Redirect::route('searchResults')->with('posts', $posts->toArray());

И в searchResults изменить:

return View::make('frontend.search.search',['posts' => Session::get('posts')]); 

в:

dd(Session::get('posts'));

чтобы убедиться, где возникает проблема - в первом методе или в методе после перенаправления

person Marcin Nabiałek    schedule 27.12.2015
comment
Используя ваш способ, он показывает все сообщения на странице результатов поиска, у которых есть первое предложение вроде, а затем все сообщения с заголовком и содержанием: array(15) { [0]=> array(9) { [id] =› int(1) [category]=› string(5) share [title]=› string(54) Touch Events вместо Click или Hover с JavaScript [summary]=› string(116) æœ¬æ–‡è® ²è§£äº†åœ¨ç§»åŠ¨ç«¯ä½¿ç”¨Touch Events而ä¸æ˜¯Click 或Hover,æ¥ä½¿å¾—ç”¨æˆ·å¾—åˆ°æ›´åŽŸç ”Ÿæ€çš„ä½“éªŒï¼ [content]=› string(12228) - person franklee; 27.12.2015
comment
@franklee Но вы использовали свой $posts = Post::where('content', 'like', '%'.$keyword.'%')->paginate(5); перед возвратом? - person Marcin Nabiałek; 27.12.2015
comment
У меня есть только чек, и я использую: $posts = Post::where('content', 'like', '%'.$keyword.'%')-›get(); только сейчас, чтобы получить то, что я только что сказал. ДОБАВИТЬ: и я пробовал paginate(5) заменить get(), результат тот же - person franklee; 27.12.2015
comment
@franklee Так что измените это снова на то, что у вас было в начале: $posts = Post::where('content', 'like', '%'.$keyword.'%')->paginate(5); - person Marcin Nabiałek; 27.12.2015
comment
кажется тот же результат, что мне не хватает? - person franklee; 27.12.2015
comment
Что ты имеешь в виду? Вы получаете все результаты или ошибку? Если все результаты, это невозможно, потому что я только меняю пагинатор на массив, не более того - person Marcin Nabiałek; 27.12.2015
comment
Это невозможно. Вы должны делать что-то не так. Боюсь, я не смогу помочь вам тогда - person Marcin Nabiałek; 27.12.2015
comment
Я думаю, что это причина нумерации страниц, потому что, когда я убираю $posts-›links(), он может показать страницу и результаты. Но я не знаю, что я делаю неправильно, спасибо - person franklee; 27.12.2015
comment
Как я уже сказал, вы вообще не должны использовать представление, чтобы найти ошибку. Но, похоже, вы не уследили за тем, что я написал в ответ. - person Marcin Nabiałek; 27.12.2015
comment
Я сделал, как вы сказали, чтобы сбросить свой код и посмотреть результаты, и они могут отображаться. но на вашем пути get() и paginate() все работает. - person franklee; 27.12.2015
comment
Так что, если они оба работают., теперь вы должны изменить свой шаблон при использовании paginate, чтобы использовать posts как массив результатов, а не как коллекцию - person Marcin Nabiałek; 27.12.2015