你可以请检查为什么这段代码在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]);
}
检查此代码
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]);
}
为什么需要使用查询构建器来执行这种不复杂的查询?
如果在Teacher
模型中添加关系方法,则可以更轻松地实现此目的。
所以在你的Teacher
类中添加以下内容:
public function nation() {
return $this->belongsTo(Nation::class);
}
然后在您的控制器中,您可以像这样使用它:
$teacher->nation;
如果你允许在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]);
}