首页 > 解决方案 > Query 中的 WhereIn 不适用于数组,有什么解决方案吗?

问题描述

scopeFilter在模型中定义了以下代码

public function scopeFilter($query, array $filters){
    $query->when($filters['subjects'] ?? null, function ($query, $data) {
        //Subjects ids will be comma seperated string eg : 127,125
        $subject_array = explode(',', htmlspecialchars_decode($data))
        $query->where(function ($query) use ($subject_array) {
            $query->whereIn('subjects_ids', $subject_array);
        });
    });
    $query->when($filters['topics'] ?? null, function ($query, $data) {
        //topics ids will be comma seperated string eg : 127,125
        $topic_array = explode(',', htmlspecialchars_decode($data))
        $query->where(function ($query) use ($topic_array) {
            $query->whereIn('topics_ids', $topic_array);
        });
    });
    $query->when($filters['search'] ?? null, function ($query, $search) {
        $query->where(function ($query) use ($search) {
            $query->where('name', 'like', '%'.$search.'%');
        });
    });
}

这是我在控制器中使用它的方式

$exams = Exams::filter(\Request::only('search', 'subjects','topics'))
            ->orderBy('status', 'DESC')
            ->orderBy('updated_at', 'DESC')->transform(....);

如果这是在 url 查询中传递的,那么结果将为空。我在这里做错什么了吗?

基本上是三个过滤器,搜索工作正常,但主题和主题不起作用。

标签: laravellaravel-5eloquentlaravel-query-builder

解决方案


认为你错过return了 scopeFilter


推荐阅读