在 Laravel 5 的预加载中应用 Where 子句

Apply Where clause in eager loading in Laravel 5

我的数据库中有两个 table:

  1. tbl_patient_master
  2. tbl_dept_master

tbl_patient_mastertable 的列是:

tbl_dept_mastertable 的列是:

现在我想显示特定科室的患者列表。如果用户说 'ENT' 那么所有 'ENT' 部门的患者都应该 returned.

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

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();

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

谢谢。

您不需要使用 repository,只需使用 Patient 模型。 您已经定义了关联,所以这应该有效:

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

如果你想从 Patient 模型的角度来做,你可以选择使用 whereHas

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

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