I have a filter with three check boxes, each of which has a Value “question”, “partnership”, “complaint”. but when I select two data from the check box (ex.complaint & question) sent to the controller and I use the orWhere function, the data is error (all appearing). Is what I’m doing wrong?
x
$data = BrandEnquiry::whereHas('brand', function($query) use ($post){
$query->where('id_brand', '=' , $post['id_brand']);
});
if(isset($post['question'])){
$data->where(function ($key) use ($post){
$key->orWhere('subject', 'LIKE', '%'.$post['question']);
});
}
if(isset($post['complaint'])){
$data->where(function($q)use($post){
$q->orWhere('subject', 'LIKE', '%'.$post['complaint']);
});
}
if(isset($post['partnership'])){
$data->where(function($q)use($post){
$q->orWhere('subject', 'LIKE', '%'.$post['partnership']);
});
}
$data = $data->orderBy('updated_at','desc')
->with('brandOutlet')
->with('user')
->get();
and HTML
<div class="row">
<div class="col-lg-8 chxBox">
<label>Subject:</label>
<div class="form-check">
<input class="form-check-input" type="checkbox" value="question" id="question" name="question">
<label class="form-check-label" for="defaultCheck1">
Question
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" value="complaint" id="complaint" name="complaint">
<label class="form-check-label" for="defaultCheck1">
Complaint
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" value="partnership" id="partnership" name="partnership" >
<label class="form-check-label" for="defaultCheck1">
Partnership
</label>
</div>
</div>
Thanks for advance
Advertisement
Answer
You need to merge all orWhere
together:
$data = BrandEnquiry::whereHas('brand', function($query) use ($post){
$query->where('id_brand', '=' , $post['id_brand']);
});
$data->where(function ($key) use ($post){
if(isset($post['question']))
$key->where('subject', 'LIKE', '%'.$post['question']);
if(isset($post['complaint']))
$key->orWhere('subject', 'LIKE', '%'.$post['complaint']);
if(isset($post['partnership']))
$key->orWhere('subject', 'LIKE', '%'.$post['partnership']);
});
$data = $data->orderBy('updated_at','desc')
->with('brandOutlet')
->with('user')
->get();