Laravel如何设置输入字段为空搜索结果不显示,默认不显示搜索结果。

1. 问题描述

我正在使用 Laravel 进行搜索功能,但是Laravel 页面没有任何搜索输入,所有结果都会显示出来。
怎么设置让输入空白时不显示搜索结果
现在默认打开搜索前端网页就会直接显示所有搜索结果。
没有输入任何条件,没有提交。

2. 运行环境

debian9

1). 当前使用的 Laravel 版本?

laravel7

2). 当前使用的 php/php-fpm 版本?

php7

3). 当前系统

debian9

3). 您期望得到的结果?

我希望默认打开页面默认不显示 搜索结果,输入条件,提交后台,前端显示搜索结果

<div style="text-align:center;vertical-align:middel;">
    <form action="" method="GET"   >
        <input type="text" required="required" autofocus=""   name="q" style="width:400px; height:26px;"placeholder="{{$q}}" >
        <input type="submit" value="Search"   style="width:100px; height:26px;">
    </form>
</div>
</div>
<hr>
<ul id="content-list">
@foreach($sites as $v)
@php
$data = 1;
@endphp
    <li>
        <article class="content-item" @if($v->img)style="background-image:url('{{url('upload/'.$v->img)}}');"@endif >
            <header>
                <h1><a href="{{route('vote')}}?id={{$v->id}}">{{$v->name}}</a></h1>
            </header>
        </article>
    </li>
@endforeach
@if(!isset($data))
<div class="centerme"><h1>No pages found<h1></div>
@endif
</ul>
{{ $sites->links() }}
</div>
 public function search(Request $request)
    {
        $data = $request->all();
        if(isset($data['p']))
            $request->request->add(['page'=>$data['p']]);
        $q = (isset($data['q']))? $data['q']:'';
        $sites = Website::with('comments')
            ->withCount([
                'comments as up' => function($query){
                    $query->where('attitude',1);
                },
                'comments as up7' => function($query){
                    $date=date_create();
                    date_modify($date,"-7 days");
                    $query->where('created_at','>',date_format($date,"Y-m-d H:i:s"))
                        ->where('attitude',1);
                },
                'comments as down' => function($query){

                    $query->where('attitude',2);
                },
                'comments as down7' => function($query){
                    $date=date_create();
                    date_modify($date,"-7 days");
                    $query->where('created_at','>',date_format($date,"Y-m-d H:i:s"))
                        ->where('attitude',2);
                },
            ])
            ->where([['state','>',0],['name','like',"%$q%"]])
            ->orWhere([['state','>',0],['url','like',"%$q%"]])
            ->orWhere([['state','>',0],['keywords','like',"%$q%"]])
            ->orWhere([['state','>',0],['description','like',"%$q%"]])
            ->orderBy('sort','desc')
            ->orderBy('state','desc')
            ->orderBy('up7','desc')
            ->orderBy('down7','asc')
            ->orderBy('up','desc')
            ->orderBy('created_at','desc')
            ->orderBy('down','asc')
            ->paginate(15);
        foreach($sites as $v){
            if(!$v->up7 && !$v->down7)
                $v->up7s = 0;
            elseif(!$v->down7)
                $v->up7s = 100;
            else
                $v->up7s = min(floor(($v->up7/($v->down7+$v->up7))*100), 100);
        }
        $arr = [
            'sites' => $sites,
            'q' => $q,
        ];
        return view('search', $arr);
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案
//条件未设置或为空的判断
if(!isset($data['p'])||empty($data['p'])){
      $arr=[
            'sites'=[],
             'p'=>''
       ]
        return view('search', $arr);
}
数组不建议用empty
2年前 评论
讨论数量: 9

那就先判断一下条件是不是为空,为空的话直接返回空数组或者null不就是

2年前 评论
vincent0326 (楼主) 2年前

sql看的头皮发麻 :joy:你要的结果是不是这样的效果

$sites = WebSite::query()
        ->when($q, function($query) use ($q) {
            $query->where(['state','>',0])
                ->where([
                    ['url','like',"%$q%", 'or'],
                        ...
                    ]);
        }, function($query) {
           //给个不存在的条件
            $query->where('id', '<', 0);
        })
        ->orderBy('sort','desc')
              ...
        ->paginate();
2年前 评论
//条件未设置或为空的判断
if(!isset($data['p'])||empty($data['p'])){
      $arr=[
            'sites'=[],
             'p'=>''
       ]
        return view('search', $arr);
}
数组不建议用empty
2年前 评论

如果你用laravel维护的created_at的话,那个date_create和date_modify的也不用,直接

$query->where('created_at','>',today()->subDays(7))
                        ->where('attitude',1);

如果你没修改page参数的话,$request->request->add(['page'=>$data['p']]);这个也不用,paginate()方法会自己处理并且默认为每页15条数据,如果翻页也要带参数的话直接在视图$sites->append(request()->all())->links()

2年前 评论
lun1bz (作者) 2年前
lun1bz (作者) 2年前

我用了if($q){查询}解决了显示的问题。

可是也造成了另外一个问题,前台在首次打开的情况下,没有搜索输入,没有查询,变成了前台无法获取页码

错误: Arguments

"Call to a member function links() on array"
2年前 评论

后端用了 if ($q){查询} 解决了显示的问题。 前段用了判断有数据才显示页码。 此问题已经解决。

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!