Laravel使用or何处搜索参考第二个模型/集合/表

时间:2019-02-13 01:16:52

标签: php laravel

我正在尝试在刀片中为我的脚本模型实现搜索功能。对于直接在脚本集合/表中进行搜索相关的所有事情,它的性能都很好。但是,我的用户还需要能够输入Patient的first_name或last_name并在Script表中搜索属于要搜索的Patient的脚本记录。这些与hasMany / belongsTo关系相关。我正在尝试在脚本结果中引用“患者”表中的数据。

我已经尝试(已经获得SO的帮助)实现orWhereHas并引用了患者表,但是我的语法必须关闭。

我尝试使用orWhereHas引用“患者”时收到的错误消息返回:

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 %% or `last_name` like %%)))

如果引用patient_id(这是患者外键的列名),则可能会起作用。我不知道是否有办法做到这一点?

当我将'patients'更改为'patient'时,收到错误消息:

Call to undefined method App\Script::patient()

模型

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 . '%');
            });
        })
        ->orWhereHas('patients', function ($query) use ($search) {
            $query->where('first_name', 'like', '%' . $search . '%')
                ->orWhere('last_name', 'like', '%' . $search . '%');
        })
        ->paginate(25);

我希望,如果有人在“脚本”表/模型的搜索输入中搜索患者姓名,他们将能够交叉引用“患者”表/模型并显示对这些患者“外键”的脚本记录。

编辑:

患者模型

// One Patient has Many Scripts relationship
public function scripts() {
    return $this->hasMany('App\Script');
}

脚本模型

// Many Scripts to One Patient relationship
public function patients() {
    return $this->belongsTo('App\Patient');
}

0 个答案:

没有答案