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

问题描述 投票:0回答:3

你可以请检查为什么这段代码在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]);
}
mysql laravel
3个回答
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
投票

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

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

所以在你的Teacher类中添加以下内容:

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

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

$teacher->nation;

0
投票

如果你允许在teacher表中为nation_id设置为空值或为空,则需要使用左连接来保留教师表中的所有记录:

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]);
}
© www.soinside.com 2019 - 2024. All rights reserved.