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');
}
}
我有两个 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'.
另一种方法是使用 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');
}
}