繁体   English   中英

PHP Laravel - If else 条件与搜索过滤器

[英]PHP Laravel - If else condition with search filter

该应用程序内置在 laravel 中。 我插入了一个名为业务状态的新搜索过滤器。

这是我页面的 output

在此处输入图像描述

这是资源/视图/business.blade.php 页面上用于业务状态下拉搜索过滤器的代码

<form  method="get" action="" class="">
        <select class="form-control" id="business_status" name="business_status" aria-describedby="business_status">
        <option value="" label="Please select">Please select</option>
                <option value="1" label="Live" <?php if(isset($_GET["business_status"]) && $_GET["business_status"] == 1){ echo 'selected="selected"';} ?>>Live</option>
        <option value="2" label="Sold" <?php if(isset($_GET["business_status"]) && $_GET["business_status"] == 2){ echo 'selected="selected"';} ?>>Sold</option>
        ----

    </select> </form>

@foreach($Businesses as $Business)
    <tr>
    <td>
      ---
    </td>
    <td>--</td>
    
    <td>{{$Business->getStatus()}}</td>
   </tr>

这是用于下拉搜索的后端代码 app/businesses.php

    public function scopeSearch($query, $request)
        {
                   
            if(isset($request->business_status)) {
                $query->where('company_status_id', $request->business_status);
            }      
            
                   
            $query->where('use_conf_box','=',0);
            return $query;
        }

这是在下表中写入业务状态的代码

 public function getStatus(){
            if(is_null($this->company_status_id)){
                return "Awaiting Approval";
            } else{
                switch ($this->company_status_id) {
                case 1:
                    if($this->isExpired()){
                        return "Expired";
                        break;
                    }
                    if($this->isExpiring()){
                        return "Expiring Soon";
                        break;
                    }
                    return "Live";
                    break;
                case 2:
                    return "Sold";
                    break;
                case 3:
                   ---

                default:
                    return "Awaiting Approval";
                }
            }

状态为 Live 的业务被归类为几个部分。 例如,如果业务到期日已过,则称为过期。 如果业务到期日在 4 周内,则称为到期。 此选项不会插入到数据库中。 但创造条件如下。

public function isLive(){
    if($this->is_approved == 1 && $this->company_status_id != 7 && $this->company_status_id != 6 && $this->company_status_id != 2 && $this->company_status_id != 3 && $this->company_status_id != 8){
        return true;
    } else {
        return false;
    }
}

public function isExpired(){
    if($this->expiry_date > date("Y-m-d")){
        return false;
    } else {
        return true;
    }
}

public function isExpiring(){
    if($this->expiry_date > date("Y-m-d", strtotime('+4 weeks'))){
        return false;
    } else {
        return true;
    }
}

如何将这些条件置于过滤器之下。 目前,这一切都属于现场直播。 正如您在屏幕截图中看到的,如果选择实时,它也会选择过期的业务。

我希望该业务显示 select 何时到期。

最简单的方法是为每个测试创建一些 scope,如下所示:

public function isExpired(){
    if($this->expiry_date > date("Y-m-d")){
        return false;
    } else {
        return true;
    }
}

public function scopeIsExpired($query){
    return $query->where('expiry_date', '>', now());
}

public function isLive(){
    if($this->is_approved == 1 && $this->company_status_id != 7 && $this->company_status_id != 6 && $this->company_status_id != 2 && $this->company_status_id != 3 && $this->company_status_id != 8){
        return true;
    } else {
        return false;
    }
}

public function scopeIsLive($query){
    return $query->notWhereIn('company_status_id', [7, 6, 2, 3, 8])->where('is_approved', 1);
}

然后在您的 controller 中:

if($request->business_status == 'expired'){
    $query->isExpired();
}

if($request->business_status == 'live'){
    $query->isLive();
}

等等...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM