【问题标题】:Apply Where clause in eager loading in Laravel 5在 Laravel 5 的急切加载中应用 Where 子句
【发布时间】:2015-09-15 10:25:03
【问题描述】:

我的数据库中有两个表:

  1. tbl_patient_master
  2. tbl_dept_master

tbl_patient_master 表的列是:

  • 患者 ID
  • 患者姓名
  • dept_id
  • created_at
  • updated_at

tbl_dept_master 表的列是:

  • dept_id
  • 部门名称
  • 部门类型

现在我想显示一个特定部门的患者列表。如果用户说“耳鼻喉科”,则应返回所有具有“耳鼻喉科”的患者。

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

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

不幸的是,这将返回所有患者,而不仅仅是来自特定部门的患者。 我应该怎么做才能从特定部门获得所有患者?

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 谢谢,BTWI 在我的项目中使用了 Repository 方法,所以我不想改变流程和结构。
      猜你喜欢
      • 2020-09-12
      • 2016-06-14
      • 2018-06-10
      • 2019-11-05
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      相关资源
      最近更新 更多