在 laravel 5 的 belongsToMany 关系中搜索

searching in belongsToMany relationship in laravel 5

实际上我想搜索用户想在 select 任何学科或课程之后搜索的那些问题。

如果从主题或课程中删除 whereHas 它的作品,但两者都不起作用。

求belongsToMany realtionship搜索的更好解决方法

我有一个问题 table Question 模型 class

class Question extends Model{
    public function courses(){
        return $this->belongsToMany('App\Models\Course','course_questions');
    }

    public function subjects(){
        return $this->belongsToMany('App\Models\Subject','subject_questions');
    }
}

在我的 searchController

public function index(Request $request){
        $questions = Question::with(['user','courses','branches','subjects','years','universities','question_type'])
            ->where("status","=",1)
            ->where(function($query) use($request){
                $q = $request->q;
                if(isset($q) && !is_null($q)){
                    $query->where("question","LIKE","%$q%");
                }
            })
            ->whereHas('subjects',function($query) use($request){
                $subjects = $request->subject;
                if(isset($subjects)){
                    $_subjects = explode(" ",$subjects);
                    $query->whereIn("slug",$_subjects)
                    ->orWhereIn("subject_name",$_subjects);
                }
            })
            ->whereHas('courses',function($query) use($request){
                $course = $request->course;
                if(isset($course)){
                    $_course = explode(" ",$course);
                    $query->whereIn("slug",$_course)
                        ->orWhereIn("course",$_course);
                }
            })
            ->paginate();
        if($request->ajax()){
            $returnHTML = view('questions.question_list')->with('questions', $questions)->render();
            return response()->json(array('success' => true, 'pageContent'=>$returnHTML));
        }

您可能应该以这种方式构建查询 - 您应该在向查询添加任何约束之前验证条件:

$query = Question::with(['user','courses','branches','subjects','years','universities','question_type'])
            ->where("status","=",1);

$q = $request->q;
if(isset($q) && !is_null($q)) {
    $query = $query->where("question","LIKE","%$q%");
}

$subjects = $request->subject;
if (isset($subjects)) {
    $query = $query->whereHas('subjects',function($query) use($subjects){                
        $_subjects = explode(" ",$subjects);
        $query->whereIn("slug",$_subjects)
       ->orWhereIn("subject_name",$_subjects);                
   });
}

$course = $request->course;
if (isset($course)) {
    $query = $query->whereHas('courses',function($query) use($course ){       
        $_course = explode(" ",$course);
        $query->whereIn("slug",$_course)
       ->orWhereIn("course",$_course);
    });
}

$questions = $query->paginate();