具有内连接的 Laravel 作用域

问题描述 投票:0回答:1

我有 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

jobs
where (
projects
.
name
LIKE %测试%))

在我的

JobsController.php
我有:

$searchResults = Job::Search($searchTerm)->get();
php mysql laravel search inner-join
1个回答
6
投票

$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)
© www.soinside.com 2019 - 2024. All rights reserved.