Laravel 5.3内连接不正常

时间:2016-12-14 15:00:28

标签: laravel inner-join laravel-5.3 laravel-query-builder

我有两个表作为'jobs'和'desired_skills'。 表结构如下。

工作表 jobs Table

desired_skills表 desired_skils table

其中desired_skills.job_id指的是jobs.job id

在控制器中我有(我从URL获取$ id作为参数,我可以确认该参数获得了所需的值)

$jobs = DB::table('jobs')->where(function ($query) use ($id) {
    $query->Join('desired_skills', 'desired_skills.job_id', '=', 'jobs.job_id')
    ->where('jobs.employer_id', '=', $id);
    ->select('*')
})->get();

当我转储并死掉$ jobs时,它只返回jobs表中的值。 但是当我运行查询时

SELECT * FROM jobs INNER JOIN desired_skills ON desired_skills.job_id = jobs.job_id它返回所需的值集。

我做错了什么?任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

我认为这与将连接包装在where子句中有关。我不认为它会在那里给你你想要的查询。

$jobs = DB::table('jobs')
    ->join('desired_skills', 'desired_skills.job_id', '=', 'jobs.job_id')
    ->where('jobs.employer_id', '=', $id)
    ->get();

答案 1 :(得分:0)

试试这个:

$jobs = DB::table('jobs')
                ->join('desired_skills', 'desired_skills.job_id', '=', 'jobs.job_id')
                ->select('jobs.*', 'desired_skills.*')
                ->get();

答案 2 :(得分:0)

查询SELECT * FROM jobs INNER JOIN desired_skills ON desired_skills.job_id = jobs.job_id 你在函数中尝试做的事情是不一样的。在这个查询中没有 提及' employer_id'在表格'工作'。

另一种选择是使用雄辩的关系,如评论所述。

模型中需要3个类:

雇主 工作 DesiredSkill

雇主和工作之间 - > one-to-many relation(雇主可以有多个工作岗位)。

在DesiredSkill和Job之间 - > one-to-one relation

我不确定你想要从加入中获得什么,但我认为如果你实施的话 允许这种关系的方法,我相信你可以解决任何问题。

class Job extends Model
{

    public function employer()
    {
        return $this->hasOne('App\Job');
    }
}

class Employer extends Model
{

    public function jobs()
    {
        return $this->hasMany('App\Employer');
    }

    public function desiredSkill()
    {
        return $this->hasOne('App\DesiredSkill');
    }
}

class DesiredSkill extends Model
{

    public function job()
    {
        return $this->hasOne('App\DesiredSkill');
    }
}