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