Laravel 关系 where 子句正在返回关系外的记录

Laravel relationship where clause is returning records outside relationship

我有一个问题,我试图从 Site 模型和 where 子句中定义关系的 Site 获取所有用户 returns 属于其他 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);

假设我的 $site_id = 2 和我的 $searchParam = 'Tom'。它 returns 个属于 site_id=1 站点的 Tom,但它还有 returns 个属于 site_id=2 站点的其他 Tom。我在这里做错了什么?

关系查询使用 ->where(),因此您的 ->orWhere() 将给出关系之外的结果。你可以通过使用额外的 where() 来解决这个问题:

$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);