首页 > 解决方案 > 仅当使用 php 在 Laravel 中通过搜索找到查询时才显示

问题描述

我有查询推荐代码的推荐代码搜索框。此代码必须在用户注册之前可用。所以基本上在 Auth.register 上我有两个框,第一个框包含推荐代码搜索框,另一个是注册框。我的目标是首先隐藏注册框,只有在找到代码时才会出现。

注册控制器

public function index(Request $request)
{
    $keyword = $request->get('search');
    $referral = Referral::where('code', 'LIKE', '%'.$keyword.'%')->get();

    if (count ( $referral ) > 0)
        return view ( 'Auth.register')->withDetails ( $referral )->withQuery ( $keyword );
    else
        return view ( 'Auth.register')->withMessage ( 'The code you provided is not existing.' );
}

register.blade.php

<!-- THIS IS THE FIRST BOX THAT HOLDS THE CODE SEARCH BOX -->
<div class="card mx-4">
    <div class="card-body p-4">        
       <h1>Referral Code</h1>
       <p class="text-muted">Please provide the referral code given to you by your collector</p>
        @if(isset($message))
            <div class="alert alert-success">
                {{ $message }}
            </div>
        @endif 

        {!! Form::open(['method' => 'GET', 'url' => '/register', 'class' => 'form-inline my-2 my-lg-0', 'role' => 'search'])  !!}
        <div style="width: 100%;">
            <input type="text" class="form-control" name="search" style="width: 100%;" placeholder="Enter your referral code here!">
        </div>
        <div style="width: 150px; margin: auto; margin-top: 20px; ">
            <button class="btn btn-success btn-default" type="submit">
                <i class="fa fa-search"></i> Check Availability
            </button>
        </div>
        {!! Form::close() !!}
    </div>
</div> 

<!-- THIS IS THE 2ND BOX THAT HOLDS THE REGISTRATION FORM -->
@if(isset($details))   
<div class="card mx-4">
    <div class="card-body p-4">
        @foreach($details as $code)
           @if($code->status==0)
             <h2>Code is available</h2>
           @else
             <h2>Code is already taken</h2>
            @endif
        @endforeach

     ... the rest of registration form ...
    </div>
</div>
@endif

我现在的问题是,@details 正在显示“推荐”的当前行

有没有办法从这条线查询,

$referral = Referral::where('code', 'LIKE', '%'.$keyword.'%')->get();

仅当结果与 $keyword 匹配时才应显示?

因为目前页面看起来像这样

在此处输入图像描述 谢谢!

标签: phplaravel

解决方案


我认为您想要将关键字与您的数据库进行匹配。因此,不要使用部分匹配,而是使用精确匹配。

public function index(Request $request)
{
    $keyword = $request->get('search');
    $referral = Referral::where([
                         ['code', $keyword],
                         ['status', 0]
                         ])->first();

    if ($referral)
        return view ( 'Auth.register')->withDetails ( $referral )->withQuery ( $keyword );
    else
        return view ( 'Auth.register')->withMessage ( 'The code you provided does not exist or already used.' );
}

并且鉴于您不需要使用以下行。

@foreach($details as $code)
    @if($code->status==0)
        <h2>Code is available</h2>
    @else
        <h2>Code is already taken</h2>
    @endif
@endforeach 

只需在 之后添加您的注册表单@if(isset($details))

你是怎么做的很奇怪。您可以使用AJAX在单个页面中执行此操作


推荐阅读