我有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未知列' projects.name'在'哪里 条款' (SQL:select * from
jobs
where {projects
。name
LIKE %试验%))
在JobsController.php
我有:
$searchResults = Job::Search($searchTerm)->get();
答案 0 :(得分:2)
$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
包含在使用中()
$query->where(function() use ($keyword, $query)