2016-12-14 90 views
0

我有两个表作为'jobs'和'desired_skills'。 表结构如下。Laravel 5.3内部联接不能正常工作

工作表 jobs Table

desired_skills表 desired_skils table

其中desired_skills.job_id指jobs.job ID

在控制器我有(我得到$ id作为从URL参数,并且我可以确认论证获得期望值)

$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(); 

当我dump和die $ jobs时,它只返回jobs表中的值。 但当我运行查询

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

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

+0

你有没有听过[雄辩关系](https://laravel.com/docs/5.3/eloquent-relationships)?! –

+0

是的,但随着进一步的发展,它会变得雄辩与雄辩。所以我选择了查询构建。 – 14k

回答

2

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

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

谢谢你。它醒了。 :)想知道在那里发生了什么与包装。再次感谢您的快速回复。 – 14k

0

试试这个:

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

查询SELECT * FROM jobs INNER JOIN desired_skills ON desired_skills.job_id = jobs.job_id 是不一样的有你正在尝试在函数做。在此查询中,表'jobs'中没有提及'employer_id' 。

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

需要3班机型:

雇主 工作 DesiredSkill

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

DesiredSkill和Job之间 - >​​。

我不确定你想要从连接中获得什么,但我认为如果你实现了 这种方法可以让我相信你解决了任何问题。

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'); 
    } 
}