使用laravel显示搜索表单'在非对象上调用成员函数getNumCommentsStr()'

时间:2016-02-01 05:20:34

标签: laravel search laravel-4

我使用laravel创建了一个搜索栏,但它没有成功。它显示如下所述的错误。而且我的帖子对象似乎有问题。但我不知道在哪里。

源代码如下,感谢您的帮助。

//搜索代码的searchController

       public function search(){

        $keyword = Input::get('keyword');

        if(empty($keyword)){
            return Redirect::route('/');
            //->with('message',array('type' => 'alert', 'content' => '不能为空'))
        }

        $posts = Post::where('content', 'like', '%'.$keyword.'%')->orderBy('created_at', 'desc')->paginate(10);

        $tags = Tag::where('count','>','0')->orderBy('count','desc')->orderBy('updated_at', 'desc')->take(20)->get();

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

   public function searchResults(){

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

//搜索栏路线

      Route::get('/searchResults', array(

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

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

//从

搜索
{{ Form::open(array('url'=>'/search','method' => 'post','class'=>''))}}
            {{ Form::token()}}
            <label for="docSearch">
                <i class="fa fa-search"></i>
            </label>

            <div class="searchInput">
                {{Form::text('keyword', '', array('class'=>'docsSearch', 'placeholder'=>'搜索论坛动态...'))}}
          {{ Form::submit('提交',array('class'=>''))}} 
{{Form::close()}}

//现在我只是想这样:

    @if(!$posts)
{{'<section class="oneQuestion">sorry,no content...</section>'}}
@else

  @foreach($posts as $post)
      <section class="oneQuestion">
          <div class="askResult">

<!--             <i class="fa fa-question notSolved"></i>
            <i class="fa fa-check solved" style="display:none;"></i> -->

          @if($post->getNumCommentsStr() == 0)
            <a href="{{URL::route('viewPost', array('id' => $post->id))}}#reviews" class="notSolved"><span class="post_comment_Num">{{$post->getNumCommentsStr()}}</span>
             <span> 回答</span>
            </a> 
          @else 
            <a href="{{URL::route('viewPost', array('id' => $post->id))}}#reviews" class="solved"><span class="post_comment_Num">{{$post->getNumCommentsStr()}}</span>
             <span> 回答</span>
            </a> 
          @endif   

          </div><!-- 
       --><div class="titlePart">
            <span>
                {{$post->user->username}}  
                {{$post->created_at->diffForHumans()}}          
            </span>
              <a href="{{ URL::route('viewPost', $post->id)}}">
              {{--  {{ substr($post->content,0,200) }}... --}}
              {{$post->title}}
              </a>
               <div class="tagWrapper">
                @foreach ($post->tags as $tag)
                         <span class="askTag" title="">{{$tag->name}} </span>            
                @endforeach                 
               </div>
          </div>
      </section>      
  @endforeach
@endif
<div class="forumLink">
   {{$posts->links()}}
</div>

//它向我显示了一个错误:

**Call to a member function getNumCommentsStr() on a non-object**

和我的getNumCommentsStr类似:

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

    //  if($num == 1){
    //  return "1";
    //  }

    return $num;
   }

代码似乎很多,但我想说清楚,所以你可以找到任何错误。再次感谢。

编辑2 感谢NightMICU的建议,我改变了

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

以下内容:

重定向::路线(&#39; SearchResult所&#39;) - &gt;在(&#39;帖子&#39;) - &gt;在(&#39;标签&#39;,$标签); < / p>

结果没有任何警报,只是显示:对不起,没有内容...... 并没有显示任何搜索结果,有什么问题吗?感谢

编辑两个

//在一个搜索方法中删除searchResult方法,以便我可以在搜索方法中右侧返回视图。

       public function search(){
            $keyword = Input::get('keyword');
            if(empty($keyword)){
                return Redirect::route('developer');
                //->with('message',array('type' => 'alert', 'content' => '不能为空'))
            }
            $posts = Post::where('content', 'like', '%'.$keyword.'%')->orderBy('created_at', 'desc')->paginate(10);
            $tags = Tag::where('count','>','0')->orderBy('count','desc')->orderBy('updated_at', 'desc')->take(20)->get();

            return View::make('frontend.search.search',['posts' => $posts,'tags' => $tags]);
       }

编辑3

这里有两个问题。

一个是当我改变它时,它可以输出结果但数据库具有的所有结果。不是关键字结果。

两个是当有额外的页面时,一旦我打开链接http://localhost/html5lav/public/search?page=2,它只会显示错误:

模型[发布]没有查询结果。

1 个答案:

答案 0 :(得分:0)

最初的问题很可能与您显示搜索结果的不寻常方式有关;通过会话将Eloquent集合传递给另一个方法,仅显示视图。您还将Post Eloquent集合转换为带有->toArray()的常规数组,分页需要集合而不是数组。

该部分的解决方案:

public function search(){

        $keyword = Input::get('keyword');

        if(empty($keyword)){
            return Redirect::route('/');
            //->with('message',array('type' => 'alert', 'content' => '不能为空'))
        }

        $posts = Post::where('content', 'like', '%'.$keyword.'%')->orderBy('created_at', 'desc')->paginate(10);

        $tags = Tag::where('count','>','0')->orderBy('count','desc')->orderBy('updated_at', 'desc')->take(20)->get();

        return View::make('frontend.search.search')->with('posts', $posts)->with('tags', $tags);
   }

在处理了初始问题后,您报告了分页链接无法正常工作 - 您点击第2页并且没有任何Post结果。如果用户输入搜索词的页面的路由也是/search,则存在冲突。相反,请更改搜索表单发布到的路径,可能是/searchResults(然后使用search方法加载结果)。您可能还需要考虑使用GET而不是POST请求,允许用户为其搜索结果添加书签或共享链接。

关于显示posts表中所有条目的问题,您需要在Laravel中查看MySQL原始查询。通过文档摆动并查找它们。