我使用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,它只会显示错误:
模型[发布]没有查询结果。
答案 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原始查询。通过文档摆动并查找它们。