laravel - 在 Laravel 模型中创建左连接方法
问题描述
我在 Controller 的左下方加入,它在一份报告中显示特定教师的所有记录,并返回所有正确的记录。我想在许多其他报告中使用完全相同的查询,所以我想在 eloquent 模型中创建 Method 以便在我想要的任何地方调用它。 如何在模型中使用此查询 以及如何在视图中调用它。
public function edit(Teacher $teacher)
{
$teachers= DB::table('teachers')
->leftjoin('religions', 'teachers.religion_id', '=', 'religions.id')
->leftjoin('areas', 'teachers.area_id', '=', 'areas.id')
->select('teachers.*')
->where('teachers.id',$teacher->id)
->first();
$areas = area::all();
$religions = religion::all();
return view('teachers.report1',['teachers' => $teachers, 'teacher'=>$teachers,'areas'=>$areas,
'religions'=>$religions]);
解决方案
在教师模型中,您可以执行
public function teacherRecords(){
$teachers= DB::table('teachers')
->leftjoin('religions', 'teachers.religion_id', '=', 'religions.id')
->leftjoin('areas', 'teachers.area_id', '=', 'areas.id')
->select('teachers.*')
->where('teachers.id',$this->id)
->first();
}
并像使用它一样$teach->teacherRecords();
如果我能理解表/模型之间的关系,我可以提供更好的解决方案。
如果老师只有一个宗教和一个领域,就这样做
class Teacher extends Model{
public function area()
{
return $this->hasOne('App/Area');
}
public function religion()
{
return $this->hasOne('App/religion');
}
}
在区域模型
class Area extends Model{
public function teacher()
{
return $this->hasOne('App/Teacher');
}
}
在宗教模型中
class Religion extends Model{
public function teacher()
{
return $this->hasOne('App/Teacher');
}
}
现在你可以$teacher->area
做$teacher->religion
推荐阅读
- javascript - 如何将多边形添加到地图
- ios - UITableViewCell 内的多个堆栈视图内的多行标签
- c# - Elmah 日志错误超时导致程序崩溃
- ruby-on-rails - 存根或模拟实例方法 rspec
- ruby-on-rails - 如何测试“Model.valid”?在使用 Rspec 的 FactoryBot 生成模型上?
- jacob - 如何传递 BarTender.Messages 类型的参数
- dynamics-crm - 获取子网格中的所有业务推荐字段
- python - 系列:动态换位优化
- c# - 从类函数中获取回调
- python - 如何迭代每个连接的组件标签像素