因此,我正在搜索具有多个标签的记录,并且只想显示 start_date 已经过去的结果。无论开始日期是什么,它似乎都可以接受其显示作业。 close 方法是我自己创建的一种方法,用于计算一定距离的结果,其代码如下
public function scopeNear($query, $latitude, $longitude, $distance = 0) {
$query->addSelect(DB::raw("*, 3959 * acos( cos( radians($latitude) ) * cos( radians( geolat ) ) * cos( radians( geolng ) - radians($longitude) ) + sin( radians($latitude) ) * sin( radians( geolat ) ) ) AS distance"));
if( $distance > 0 )
$query->having('distance', '<', $distance);
return $query->orderBy('distance', 'ASC');
}
这个函数工作正常,如果我这样做
$jobs = \App\Job::near($lat, $lng, $distance)->where('start_date', '<=', Carbon::now())->get();
效果也很好。但是,当我使用完整查询(如下)时,我得到了结果,但正如我所说,它们没有按预期按开始日期进行过滤。
$search = preg_split("/[\s,]+/", $request->input('keywords'));
$jobs = \App\Job::near($lat, $lng, $distance)->whereHas('skills', function ($query) use ($search) {
foreach ($search as $keyword) {
$query->where('name', 'LIKE', "%$keyword%");
}
})->orWhereHas('sectors', function ($query) use ($search) {
foreach ($search as $keyword) {
$query->where('name', 'LIKE', "%$keyword%");
}
})->orWhereHas('title', function ($query) use ($search) {
foreach ($search as $keyword) {
$query->where('name', 'LIKE', "%$keyword%");
}
})->where('start_date', '<=', Carbon::now())->get();
谁能告诉我问题出在哪里吗?任何帮助将不胜感激。
最佳答案
$query->where(...)
返回修改后的对象,而不是操作被调用的实例。您需要不断更新并返回查询对象,如下所示:
$search = preg_split("/[\s,]+/", $request->input('keywords'));
$jobs = \App\Job::near($lat, $lng, $distance)->whereHas('skills', function ($query) use ($search) {
foreach ($search as $keyword) {
$query = $query->where('name', 'LIKE', "%$keyword%");
}
return $query;
})->orWhereHas('sectors', function ($query) use ($search) {
foreach ($search as $keyword) {
$query = $query->where('name', 'LIKE', "%$keyword%");
}
return $query;
})->orWhereHas('title', function ($query) use ($search) {
foreach ($search as $keyword) {
$query = $query->where('name', 'LIKE', "%$keyword%");
}
return $query;
})->where('start_date', '<=', Carbon::now())->get();
关于php - 在 Laravel 中搜索关系和日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29967381/