Я пытаюсь реализовать функцию поиска в своем лезвии для моей модели скрипта. Он отлично работает для всего, что связано с поиском непосредственно в коллекции/таблице Script. Однако мои пользователи также должны иметь возможность вводить first_name или last_name пациента и искать записи сценариев в таблице сценариев, которые принадлежат искомому пациенту. Они связаны отношением 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'])}}
Скриптконтроллер
$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 Я пытаюсь показать сценарии, принадлежащие найденному пациенту.






Это высокий уровень, но вы можете повторить сценарий найденного пациента, предполагая, что у вас есть лезвие, где вы будете обрабатывать ответ:
$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 посмотрите на комментарий выше: «Я пытаюсь показать сценарии, принадлежащие найденному пациенту»
По сути, вам нужно загрузить модель 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);
Я получаю сообщение об ошибке SQLSTATE[42S22]: Column not found: 1054 Unknown column 'scripts.patients_id' in 'where clause' (SQL: select count(*) as aggregate from scripts`, где существует (выберите * из patients, где scripts.patients_id = patients.id и (first_name как %% или last_name как %%)))` из этого. Когда я пытаюсь изменить «пациентов» на «пациентов», это дает ошибку Call to undefined method App\Script::patient(). столбец в сценариях, который ссылается на пациента, — patient_id.
Я не уверен, что это ясно. Вы пытаетесь показать имя и фамилию пациента, которому принадлежат найденные сценарии? Или вы пытаетесь показать найденные скрипты принадлежащие больному?