2016-12-14 14 views
0

私は 'jobs'と 'desired_skills'という2つのテーブルを持っています。 テーブル構造は以下の通りです。Laravel 5.3内部結合が正しく機能しない

ジョブdesired_skills.job_idは、私は(私はURLから引数として$ IDを取得していますしているコントローラ内のID

をjobs.job指しテーブル jobs Table

desired_skillsテーブル desired_skils table

私は引数が目的の値をつかむことを確認できます)

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

私がダンプして$ジョブを終了すると、ジョブテーブルの値だけが返されます。 しかし、私はクエリを実行するとき

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'が記述されていません( )。

代わりに、コメントで言及されているように、雄弁な関係を使用することもできます。 - >one-to-many relation(雇用主が複数のジョブを持つことができます)

雇用 仕事 DesiredSkill雇用と仕事の間

あなたがモデルで3つのクラスを必要としています。

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'); 
    } 
} 
関連する問題