在 Laravel 5 的预加载中应用 Where 子句
Apply Where clause in eager loading in Laravel 5
我的数据库中有两个 table:
- tbl_patient_master
- tbl_dept_master
tbl_patient_mastertable 的列是:
- patient_id
- patient_name
- dept_id
- created_at
- updated_at
tbl_dept_mastertable 的列是:
- dept_id
- dept_name
- dept_type
现在我想显示特定科室的患者列表。如果用户说 '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();
我的数据库中有两个 table:
- tbl_patient_master
- tbl_dept_master
tbl_patient_mastertable 的列是:
- patient_id
- patient_name
- dept_id
- created_at
- updated_at
tbl_dept_mastertable 的列是:
- dept_id
- dept_name
- dept_type
现在我想显示特定科室的患者列表。如果用户说 '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();