laravel-5 - 过滤范围不返回正确的结果
问题描述
嘿,我正确使用此代码来过滤和搜索基于两个数据列表的表,所以我在我的控制器中编写此代码
$films = Film::filter()->get();
在我的模型中:
public function scopeFilter($query)
{
$directors = request('director')[0];
$genres=request('genre')[0];
if (isset($directors) && $directors != []) {
foreach ($directors as $director) {
$query->orwhere('director', $director);
}
if( isset($genres) && $genres!=[] ){
$query->where(function ($query) use ($genres){
foreach ($genres as $genre) {
$query->orwhere('genre', $genre);
}
});
}
}else{
if( isset($genres) && $genres!=[] ){
foreach ($genres as $genre) {
$query->orwhere('genre', $genre);
}
}
}
return $query;
}
最后在两个变量之间使用 or 代替并且有人可以解决这个问题吗 谢谢
解决方案
您是否收到错误消息?当你说它不起作用时,具体是什么不起作用?它返回的数据不正确吗?
另外,$directors
和$genres
数组的内容是什么样的?它们只是用 ID 填充的数组吗?如果是,您可以尝试执行whereIn
子句,而不必遍历所有项目:
public function scopeFilter($query)
{
$directors = request('director')[0];
$genres=request('genre')[0];
// Assuming they look like this:
// $directors = [1,2,3];
// $genres = [4,5,6];
if (isset($directors) && count($directors)) {
$query->whereIn('director', $directors);
}
else if(isset($genres) && count($genres)) {
$query->whereIn('genre', $genres);
}
return $query;
}
推荐阅读
- assembly - 是否可以使用 equ 计算小数表达式?
- c - 有没有办法在C中重复字符串中的字符?
- javascript - 浏览器标签通知
- javascript - 按日期排序数组并在重复项上增加数量
- dialog - Bot Framework SDK 4.11 DialogContextError:无法读取 undefinedTypeError 的属性“trackTrace”:无法读取未定义的属性“trackTrace”
- azure - 在 C# 中压缩 Azure Blob 文件被损坏
- c++ - 将包含自定义目标的目录导出到消费者
- flutter - 发布后如何自定义 Flutter 应用
- blazor - 将 EditForm 绑定到数组时如何让 EditContext.Validate() 工作
- c++ - 模板函数声明中函数名之后的第二个 <> 是什么?