首页 > 解决方案 > 为什么有结果时消息不隐藏?

问题描述

我有一个页面,其中包含 4 个选择菜单,用于根据会议类别、城市、价格和日期过滤会议。

但是,如果用户的选择没有返回任何结果,则应该出现一条消息“您的搜索没有结果”,并且它有效,该消息就会出现。但是有一个问题,例如用户做了一个不返回任何结果的选择,会出现消息,但是如果用户做了另一个返回结果的选择,结果会出现但消息不会隐藏,消息仍然会出现,说没有结果。

你知道为什么会出现这个消息吗?

HTML:

@if($flash = session('no_conferences'))
        <div class="alert alert-danger" role="alert">
            <strong><i class="fa fa-check-circle" aria-hidden="true"></i></strong>
            {{ $flash }}
        </div>
    @endif

    <form action="{{ route('search.index') }}" method="get">
        {{csrf_field()}}
        <div class="row">


            <div class="col-6 col-md-3 mb-4 mb-md-0">
                <select class="custom-select form-control font-size-xsm text-gray searchSelect"
                        name="category_id">
                    <option selected="" value="">All categories</option>
                    @foreach ($categories as $category)
                        <option value="{{ $category->id }}"
                                {{ (!empty($categoryId) && $categoryId == $category->id) ? 'selected' : '' }}>
                            {{ $category->name }}
                        </option>
                    @endforeach
                </select>

            </div>

            <div class="col-6 col-md-3 mb-4 mb-md-0">

                <select class="custom-select form-control"
                        name="city">
                    <option selected="" value="">Country</option>
                    @foreach($cities as $city)
                        <option value="{{ $city }}" {{ (!empty($selectedCity) && $selectedCity == $city) ? 'selected' : '' }}>
                            {{ $city }}
                        </option>
                    @endforeach
                </select>

            </div>

            <div class="col-6 col-md-3">
                <select class="custom-select form-control font-size-xsm"
                        name="price">
                    <option value="paid" {{ (!empty($price) && $price == 'paid') ? 'selected' : '' }}>
                        Paid
                    </option>
                    <option value="free" {{ (!empty($price) && $price == 'free') ? 'selected' : '' }}>
                        Free
                    </option>
                </select>
            </div>

            <div class="col-6 col-md-3">

                <select class="custom-select form-control"
                        name="range">
                    <option value="day" {{ (!empty($range) && $range == 'day') ? 'selected' : '' }}>
                        Tody
                    </option>
                    <option value="week" {{ (!empty($range) && $range == 'week') ? 'selected' : '' }}>
                        This Week
                    </option>
                </select>
            </div>
        </div>
    </form>

搜索控制器

class SearchController extends Controller
{
    public function index(Request $request){
        $categoryId = $request->get('category_id');
        $city       = $request->get('city');
        $price      = $request->get('price');
        $range      = $request->get('range');
        $pageLimit  = 8;

        $conference = Conference::Query()->where('status', 'P');


        if(!empty($categoryId)) {
            $conference = $conference->whereHas('categories', function($qry) use($categoryId) {
                $qry->where('category_id', $categoryId);
            });
        }

        if(!empty($city)) {
            $conference = $conference->where('city', $city);
        }

        if(!empty($price)) {
            if($price == "free") {
                $conference = $conference->whereHas('registrationTypes', function($qry)  {
                    $qry->where('price', '=', 0);
                });
            } elseif($price == "paid") {
                $conference = $conference->whereHas('registrationTypes', function($qry)  {
                    $qry->where('price', '>', 0);
                            });
                        }

        }


        if(!empty($range)) {
            if($range == "week") {
                $conference = $conference->where('start_date', '<', Carbon::now()->addDays(7));
            } 
            elseif($range == "day") {
                $conference = $conference->whereDate('start_date', '=', Carbon::today()->format('Y-m-d'));

            }
        }

        $conference = $conference->orderBy('created_at','desc')->paginate($pageLimit);

        if(count($conference) == 0){
            Session::flash('no_conferences', 'There are no results for your search  
');
        }

        return view('search', [
            'categories'     => Category::orderBy('created_at', 'desc')->get(),
            'cities'         => Conference::orderBy('created_at','desc')->pluck("city")->unique(),
            'conferences'     => $conference,
            'categoryId'     => $categoryId,
            'selectedCity'   => $city,
            'price'          => $price,
            'range'          => $range,
        ]);
    }
}

标签: phplaravel

解决方案


此分配将始终返回 true。

@if($flash = session('no_conferences'))

尝试将您的视图条件更改为:

@if(Session::has('no_conferences'))
    <div class="alert alert-danger" role="alert">
        <strong><i class="fa fa-check-circle" aria-hidden="true"></i></strong>
        {{ Session::get('no_conferences') }}
    </div>
@endif

或者你可以在你的视图中使用类似的东西并完全删除你控制器中的会话闪存。

@unless (count($conferences))   
    <div class="alert alert-danger" role="alert">
        <strong><i class="fa fa-check-circle" aria-hidden="true"></i></strong>
        There are no results for your search
    </div>
@endunless

推荐阅读