[英]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.