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);
我有一个问题,我试图从 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);