为什么SQL内部联接在laravel中返回空结果?

时间:2019-04-29 08:47:12

标签: mysql laravel

能否请您检查为什么这段代码在laravel中返回空结果。 我试图根据教师表中的国家/地区ID来获取国家/地区名称。

public function edit(Teacher $teacher)
{

  $teachers= DB::table('teachers','nations')
  ->join('nations', 'teachers.nation_id', '=', 'nations.id')
  ->select('teachers.*')
  ->where('teachers.id',$teacher->id)
  ->first();

return view('teachers.create',['teachers' => $teachers]);
}

3 个答案:

答案 0 :(得分:1)

检查此代码

public function edit(Teacher $teacher)
{
  $teachers= DB::table('teachers')
    ->join('nations', 'teachers.nation_id', '=', 'nations.id')
    ->select('teachers.*','nations.name')
    ->where('teachers.id','=',$teacher->id)
    ->first();

  return view('teachers.create',['teachers' => $teachers]);
}

答案 1 :(得分:1)

为什么需要使用查询构建器来执行这种不复杂的查询?

如果在Teacher模型中添加关系方法,则可以更轻松地实现此目的。

因此,在您的Teacher类中添加以下内容:

public function nation() {
    return $this->belongsTo(Nation::class);
}

然后在您的控制器中可以像这样使用它:

$teacher->nation;

答案 2 :(得分:0)

如果您在教师表中允许country_id为空值或null, 您需要使用左连接来保留教师表中的所有记录:

public function edit(Teacher $teacher)
{

  $teachers= DB::table('teachers','nations')
  ->leftJoin('nations', 'teachers.nation_id', '=', 'nations.id')
  ->select('teachers.*', 'nations.name')
  ->where('teachers.id',$teacher->id)
  ->first();
  return view('teachers.create',['teachers' => $teachers]);
}