在Laravel 5中以预先加载的方式应用Where子句

时间:2015-09-15 10:25:04

标签: php mysql laravel-4 laravel-5 eager-loading

我的数据库中有两个表:

  1. tbl_patient_master
  2. tbl_dept_master
  3. tbl_patient_master 表的列是:

    • patient_id
    • patient_name
    • 的dept_id
    • created_at
    • 的updated_at

    tbl_dept_master 表的列是:

    • 的dept_id
    • DEPT_NAME
    • dept_type

    现在,我想显示特定部门的患者列表。如果用户说“ENT”,那么所有患有“耳鼻喉科”的患者都应该返回。

    为此我在模型中创建了以下关系。

    public function department()
    {
        return $this->belongsTo('App\Entities\Department','dept_id'); 
    }
    

    此代码用于获取控制器中的数据:

    $patients = $this->repository->with(array('department' => function ($query) use ($dept_name)
    {
         $query->where('dept_name', '=', $dept_name);
    }))->all();
    

    不幸的是,这将使所有患者不仅仅是特定部门的患者。 我应该怎样做才能让所有患者来自特定部门?

    感谢。

2 个答案:

答案 0 :(得分:0)

您不需要使用存储库,只需使用患者模型即可。 您已定义关联,因此这应该有效:

App\Patient::where('dept_name', '=', 'ENT');

答案 1 :(得分:0)

如果您想从Patient模型角度进行操作,可以选择使用whereHas

$dept_name = Input::get('dept_name');

$patients = Patient::whereHas('department', function ($query) use ($dept_name) {
    $query->where('dept_name', '=', $dept_name);
})->get();