我有 2 张桌子,
projects
和 jobs
。 jobs
有一个名为 project_id
的列。在 Laravel 5.2 中,我想运行一个搜索,该搜索将返回属于给定搜索词的项目的所有作业。这个 SQL 有效:
SELECT jobs.*, projects.name FROM jobs INNER JOIN projects ON jobs.project_id = projects.id WHERE projects.name LIKE "%$keyword%"
在我的
Job.php
模型中,我创建了一个作用域方法,该方法出现错误:
public function scopeSearch($query, $keyword)
{
if ($keyword != '') {
$query->where(function($query) use ($keyword) {
$query->where('projects.name', 'LIKE', '%' . $keyword . '%')->join('projects', 'jobs.project_id', '=', 'projects.id');
});
}
return $query;
}
这会产生错误:
未找到列:1054 'where 中的未知列'projects.name' 子句' (SQL: select * from
where (jobs
.projects
LIKE %测试%))name
在我的
JobsController.php
我有:
$searchResults = Job::Search($searchTerm)->get();
$query
中的参数where(function($query)
不是你传入的$query
public function scopeSearch($query, $keyword)
您可以仅使用如下查询来删除它(如@Rob提到的)
public function scopeSearch($query, $keyword)
{
if ($keyword != '') {
$query->where('projects.name', 'LIKE', '%' . $keyword . '%')
->join('projects', 'jobs.project_id', '=', 'projects.id');
}
return $query;
}
或者您需要将
$query
包含在 use()
中
$query->where(function() use ($keyword, $query)