php - Laravel chaining scope queries -


i have 2 scope queries db.

the data query looks this:

   {        year: "2015",        term: "summer",        subject_code: "digm",        course_no: "350",        instr_type: "lab",        instr_method: "face face",        section: "003",        crn: "42953",        course_title: "digital storytelling",        credits: "3.0",        day: "r",        time: "06:30 pm - 09:20 pm",        instructor: "teacher name",        campus: "university building",        max_enroll: "18",        enroll: "18",        building: "place",        room: null,        description: "by surfing internet , playing computer games, lectures, assigned readings, class screening, , research projects, class explores impact of digital media on art, design , daily living. writing intensive course. ",        pre_reqs: "",        co_reqs: ""    } 

search looks items based on user input, name of course, or instructors

/**  * search course title or subject name  * @param $query  * @param $searchterm course title or subject name i.e. "ecec 355" or  *                    "digital logic"  * @return mixed  */ public function scopesearch($query, $searchterm) {     return $query         ->where('course_title', 'like', '%' . $searchterm . '%')         ->orwhere(db::raw("subject_code || ' ' ||  course_no"),             'like',             '%' . $searchterm . '%'         )         ->orwhere('instructor', 'like', '%' . $searchterm . '%')         ; } 

the following scope queries returns lectures. tried query this: $class->lectures()->get() , works - pulls lectures.

public function scopelectures($query) {     return $query         ->where('instr_type', 'like', lecture) // lecture constant         ; } 

however, if chain scope queries together:

$class::search('digm 350')->lecture()->get();

i results of search instead of search->lab.

not quite sure why.

the reason ors in search. when apply both scopes query generated is:

where `course_title` ? or subject_code || ' ' ||  course_no ? or `instructor` ? , `instr_type` ? 

while need is

where (`course_title` ? or subject_code || ' ' ||  course_no ? or `instructor` ? , `instr_type` ?) 

notice constraints first scope have been put in parentheses.

you need change way apply constraints in search scope:

public function scopesearch($query, $searchterm) {   return $query->where(function($query) use ($searchterm) {     $query       ->where('course_title', 'like', '%' . $searchterm . '%')       ->orwhere(db::raw("subject_code || ' ' ||  course_no"), 'like', '%' . $searchterm . '%')       ->orwhere('instructor', 'like', '%' . $searchterm . '%');  }); 

}


Comments

Popular posts from this blog

c# - Better 64-bit byte array hash -

webrtc - Which ICE candidate am I using and why? -

php - Zend Framework / Skeleton-Application / Composer install issue -