簡體   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