首页 > 解决方案 > 在 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]);

标签: laraveleloquent

解决方案


在教师模型中,您可以执行

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


推荐阅读