laravel - laravel when() 辅助函数在值为 false 时执行函数
问题描述
public function getStudents(Request $request)
{
return User::where('role','student')
->where('is_enrolled',false)
->when(request('category') != 0, function ($q){
$q->where('category_id',request('category'));
})
->when($request->sort != 0, function ($q) use ($request){
$o = explode('#',$request->sort);
$q->orderBy($o[0], $o[1]);
})
->with('category')
->paginate(5);
}
我正在使用 laravel when() 函数,它在第一个函数中运行良好,但是当涉及到第二个函数时
->when($request->sort != 0, function ($q) use ($request){
$o = explode('#',$request->sort);
$q->orderBy($o[0], $o[1]);
})
它在 $request->sort 等于 0 时执行该函数,我使用 vue.js 和 axios 发送请求。
html代码是
<div id='root'>
<div class="col-2">
<select class="form-select font-type" aria-label=".form-select-sm example" v-model="category">
@if ($categories->count())
<option selected value="0">All</option>
@foreach ($categories as $cat)
<option value="{{$cat->id}}">{{$cat->title}}</option>
@endforeach
@else
<option SELECTED DISABLED value="0">No Category found</option>
@endif
</select>
</div>
<div class="col-3">
<div class="row align-items-baseline">
<div class="col-10">
<select class="form-select font-type" aria-label=".form-select-sm example" v-model="sort">
<option selected value="0">
filter
</option>
<option value="name#ASC">name - ascending</option>
<option value="name#DESC">name - descending</option>
<option value="ssn#ASC">ssn - ascending</option>
<option value="ssn#DESC">ssn - descending</option>
</select>
</div>
<div class="col-2">
<i class="fas fa-filter align-self-center"></i>
</div>
</div>
</div>
<div class="col-2 d-grid gap-2 font-type">
<button class="btn btn-primary" @click="applyFilters">
Apply filters
</button>
</div>
</div>
javascript是
<script>
var app = new Vue({
el: '#root',
data:{
students: {},
pages: [],
sort: 0,
category: 0
},
mounted(){
axios.post('/api/get-students',{
})
.then(res =>{
this.students = res.data.data;
this.pages = res.data.links;
console.log(res.data.links);
})
},
methods:{
applyFilters(){
axios.post('/api/get-students',{
sort:this.sort,
category:this.category
})
.then(response => {
this.students = response.data.data;
this.pages = response.data.links;
console.log(response.data.links);
});
}
}
})
</script>
请注意,当我将 when 条件设置为等于 0 时,它会在重新加载页面时出现 500 内部服务器错误,但是当我单击应用过滤器按钮时,它会给我结果,但是当我将其设置为不等于 0 时,它会给出结果当页面重新加载但过滤器不适用时。提前致谢
解决方案
推荐阅读
- assembly - int 10 在汇编中做什么?
- sed - 使用 sed 匹配多个子字符串并替换
- debugging - element-of-set-p:符号作为变量的值是 void:false
- jquery - 如何使用 JQuery 修改 ID 元素中的嵌套文本?
- javascript - 使用 firebase.database.ServerValue.TIMESTAMP 时有没有办法获取实际时间戳?
- java - ObjectMapper 使用 com.jsoniter 库
- android - 如何处理 Jetpack Compose 中的导航?
- arrays - 列表(字符串)vb.net中DataReader的空值
- c# - c# 不能从字符串转换为字符
- swift - 按下后重新加载 BarButtonItem(更改格式化字符串标题)