I have a problem where i try to get all users from Site which is defined relationship in Site model and on where clause it returns users that belong to other Site
$searchArray = ['name'];
$searchParam; //from request
$query = Site::findOrFail($site_id)->users();
foreach($searchArray as $key => $value){
if ($key) {
$query->orWhere($value, 'like', '%' . $searchParam . '%');
} else {
$query->where($value, 'like', '%' . $searchParam . '%');
}
}
$query->with('someTable');
$query->orderBy($order);
$query->paginate(10);
Lets say that my $site_id = 2
and my $searchParam = 'Tom'
. It returns Tom that belongs to Site with site_id=1
but it also returns other Tom that belongs to Site with site_id=2
. What am I doing wrong here?
CodePudding user response:
The relation query works with a ->where()
, so your ->orWhere()
will give results outside the relation. You can fix this by using an extra where()
like this:
$searchArray = ['name'];
$searchParam; //from request
$query = Site::findOrFail($site_id)->users();
$query->where(function($q) use ($searchArray, $searchParam) {
foreach($searchArray as $key => $value){
if ($key) {
$q->orWhere($value, 'like', '%' . $searchParam . '%');
} else {
$q->where($value, 'like', '%' . $searchParam . '%');
}
}
});
$query->with('someTable');
$query->orderBy($order);
$query->paginate(10);