【问题标题】:Laravel Search Functionality - Reference Second Model/Collection/TableLaravel 搜索功能 - 参考第二个模型/集合/表格
【发布时间】:2019-07-05 11:34:35
【问题描述】:

我正在尝试在我的刀片中为我的脚本模型实现搜索功能。对于与直接在脚本集合/表中搜索相关的所有内容,它都表现良好。但是,我的用户还需要能够输入 Patient first_namelast_name 并在 Script 表中搜索属于正在搜索的 Patient 的脚本记录。这些与 hasMany/belongsTo 关系有关。有人可以帮助我弄清楚如何引用父表来显示当前表结果吗?

模型

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'])}}

ScriptController

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

【问题讨论】:

  • 我不确定这是否清楚。您是否尝试显示找到的脚本所属的患者姓名和姓氏?或者您是否尝试显示属于找到的患者的脚本?
  • @danboh 我正在尝试显示属于找到的患者的脚本。

标签: php laravel


【解决方案1】:

这是高级别的,但您可以遍历找到的患者的脚本,假设您有一个刀片来处理响应:

$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

【讨论】:

  • @Leorent 看看上面的评论:“我正在尝试显示属于找到的患者的脚本”
【解决方案2】:

基本上你需要在搜索中使用 orWhereHas 预先加载 Patient 模型,如下所示:

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

【讨论】:

  • 我收到错误 SQLSTATE[42S22]: Column not found: 1054 Unknown column 'scripts.patients_id' in 'where clause' (SQL: select count(*) as aggregate from scripts` where exists (select * from patients where scripts.patients_id = patients.id and (first_name like % % 或 last_name 像 %%)))` 来自那个。当我尝试将“患者”更改为“患者”时,会出现错误 Call to undefined method App\Script::patient()。脚本中链接到患者的列是patient_id
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 2021-12-17
  • 2016-09-15
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
相关资源
最近更新 更多