我正在尝试在脚本模型的边栏选项卡中实现搜索功能。对于与直接在脚本集合/表中搜索相关的所有内容,它都表现良好。但是,我的用户还需要能够输入患者first_name
或last_name
,并在脚本表中搜索属于要搜索的患者的脚本记录。这些与具有许多/属于关系有关。有人可以帮助我弄清楚如何引用父表以显示当前表结果吗?
模型
Patient hasMany Script
Script belongsTo Patient (patient_id)
脚本边栏选项卡
{{ Form::text('search', $search, ['class' => 'form-control form-control-sm', 'placeholder' => 'Search Scripts...']) }}
{{Form::submit('Search', ['class' => 'btn btn-primary btn-sm'])}}
脚本控制器
$search = $request->search;
$patients = Patient::all();
$scripts = Script::
when($search, function ($query) use ($search) {
$query->where(function ($query) use ($search) {
$query
->where('prescribe_date', 'LIKE', '%' . $search . '%')
->orWhere('status', 'LIKE', '%' . $search . '%')
->orWhere('efax_reference', 'LIKE', '%' . $search . '%')
->orWhere('efax_confirmation', 'LIKE', '%' . $search . '%');
});
})
->paginate(25);
这是高级别的,但你可以循环访问找到的患者的脚本,假设你有一个边栏选项卡来处理响应:
$patient = Patient::where('first_name', 'LIKE', '%' . $search . '%')->orWhere('last_name', 'LIKE', '%' . $search . '%')->first();
return view('patient')->with(compact('patient'));
然后在边栏选项卡中,浏览响应:
@foreach ($patient->scripts as $script)
{{ $script->name }}
@endforeach
或者,如果您要返回多个患者,那么您可以执行以下操作:
@foreach ($patients as $patient)
{{ $patient->name }}
@foreach ($patient->scripts as $script)
{{ $script->name }}
@endforeach
@endforeach
本质上,您需要在搜索中急切地加载Patient
模型,如下所示orWhereHas
:
$scripts = Script::
when($search, function ($query) use ($search) {
$query->where(function ($query) use ($search) {
$query
->where('prescribe_date', 'LIKE', '%' . $search . '%')
->orWhere('status', 'LIKE', '%' . $search . '%')
->orWhere('efax_reference', 'LIKE', '%' . $search . '%')
->orWhere('efax_confirmation', 'LIKE', '%' . $search . '%');
});
})
->orWhereHas('patients', function ($query) use ($search) {
$query->where('first_name', 'like', '%' . $search . '%')
->orWhere('last_name', 'like', '%' . $search . '%');
})
->paginate(25);