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?
Advertisement
Answer
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);