Laravel 5.3 内部联接无法正常工作

Laravel 5.3 inner join not working properly

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

职位table jobs Table

desired_skills table 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 时,它仅 returns 来自工作 table 的值。 但是当我 运行 查询

SELECT * FROM jobs INNER JOIN desired_skills ON desired_skills.job_id = jobs.job_id 它 returns 设置了所需的值。

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

我认为这与将连接包装在 where 子句中有关。我认为它不会为您提供所需的查询。

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

试试这个:

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

查询SELECT * FROM jobs INNER JOIN desired_skills ON desired_skills.job_id = jobs.job_id 与您在函数中尝试执行的操作不同。在这个查询中没有 在 table 'jobs'.

中提到 'employer_id'

另一种方法是使用 eloquent 关系,如评论中所述。

您需要 3 个 类 模型:

雇主 工作 所需技能

Between Employer and Job -> 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');
    }
}