Laravel范围内部连接

时间:2016-07-13 21:59:40

标签: php mysql laravel search inner-join

我有2个表,projectsjobsjobs有一个名为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 {projectsname LIKE   %试验%))

JobsController.php我有:

$searchResults = Job::Search($searchTerm)->get();

1 个答案:

答案 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)