我正在使用laravel6建立字典网站。
当访问者搜索关键字时,将运行2个查询来查找帖子。
Controller.php
public function index(Request $request)
{
$keyword = $request->input('keyword');
$query = Post::query();
$query2 = Post::query();
if(!empty($keyword)){
$query->where('word','like','%'.$keyword.'%');
$data = $query->orderby('word', 'DESC')->paginate(4);
$query2->where('definition','like','%'.$keyword.'%');
$data2 = $query2->orderby('definition', 'DESC')->paginate(4);
return view('index')->with(['keyword' => $keyword])->with(['data' => $data])->with(['data2' => $data2]);
}
}
然后,显示第一个查询和第二个查询结果。
index.blade.php
@foreach($data as $val)
<div class="post">
<h2>{{$val->word}}</h2>
<p>{{$val->definition}}</p>
</div>
@endforeach
@foreach($data2 as $val2)
<div class="post">
<h2>{{$val2->word}}</h2>
<p>{{$val2->definition}}</p>
</div>
@endforeach
问题是,第二个循环($ data2)显示$ data的重复帖子。 那么,如何在$ data2循环中不显示重复的帖子?
我尝试像:
@foreach($data2 as $val2)
@if($val2->id !== $val->id)
<div class="post">
<h2>{{$val2->word}}</h2>
<p>{{$val2->definition}}</p>
</div>
@endif
@endforeach
但是没有用。感谢任何建议。
如果使用分页进行查询,唯一的解决方案是在控制器中实现代码。在视图的第二个foreach中,不可能知道第一个foreach的所有值。
如果我正确理解您的问题,则可以更改方法并使用一个查询。 在控制器中,您可以这样编写查询:
您没有重复的帖子,也可以搜索多个单词,并用空格隔开(对于多个搜索,单词的顺序必须与文本的顺序相同)。