2016-12-14 84 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'); 
    } 
}