我有两个表作为'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
它返回所需的值集。
我做错了什么?任何帮助将不胜感激。
答案 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');
}
}