Я приложил файл verify.blade.php и отредактированный код контроллера, а также файл маршрута, т.е. web.php, связанный с этими представлениями. Пожалуйста, помогите мне получить доступ к данным пациента, имя которого я ввожу в режиме проверки. Когда я ввожу имя этого пациента, он должен получить только данные этого пациента. В моем случае имя в качестве входных данных для предложения where. Все, что я ввожу при проверке имени, должно использоваться как ввод для метода отчета.
В моем контроллере я в настоящее время использую имя, контакт и группу крови пациента для проверки пациента. Как только введенные данные совпадают с данными, хранящимися в базе данных, метод отчета выполняется и возвращает таблицу отчета. Эта таблица отчета должна отображаться на основе имени, которое я ввел в режиме проверки.
Это мой контроллер:
public function fetch(Request $req)
{
$firstname = $req->input('firstname');
$contact=$req->input('contact');
$bloodgroup=$req->input('bloodgroup');
$verify= DB::select('select id from patient_details where firstname=? and contact=? and bloodgroup=?',[$firstname,$contact,$bloodgroup]);
if (count($verify))
{
return redirect('report');
}
else
{
echo "failed";
}
}
public function report()
{
$data = DB::table('patient_details')->where('patient_details.firstname','=',$firstname)
->join('pmedicalreadings','pmedicalreadings.id','patient_details.id')
->join('medrecords','medrecords.id','=','patient_details.id')
->join('payments','payments.id','=','patient_details.id')
->select('patient_details.firstname','patient_details.lastname','patient_details.address','patient_details.contact','patient_details.bloodgroup','patient_details.dateofbirth','patient_details.cnic','patient_details.gender','pmedicalreadings.bp','pmedicalreadings.temp','pmedicalreadings.ecg','medrecords.prerecord','payments.ptype','payments.tpayment','payments.rpayment')
->get();
return view('report',compact('data'));
}
Это мой маршрут:
Route::get('/verify', function () {
return view('/verify');
});
Route::post('verify/fetch', 'JoinController@report');
Route::get('/report','JoinController@report');
Это мой veridy.blade.php
<form action = "{{url('/verify/fetch')}}" method = "POST" class = "login100-form validate-form flex-sb flex-w">
@CSRF
<span class = "login100-form-title p-b-32">
Personal Details
</span>
<span class = "txt1 p-b-11">
Username
</span>
<div class = "wrap-input100 validate-input m-b-36" data-validate = "Username is required">
<input class = "input100" type = "text" name = "username" >
<span class = "focus-input100"></span>
</div>
<span class = "txt1 p-b-11">
Contact
</span>
<div class = "wrap-input100 validate-input m-b-36" data-validate = "Email is required">
<input class = "input100" type = "text" name = "contact" >
<span class = "focus-input100"></span>
</div>
<span class = "txt1 p-b-11">
Blood-Group
</span>
<div class = "wrap-input100 validate-input m-b-36" data-validate = "Email is required">
<input class = "input100" type = "text" name = "bloodgroup" >
<span class = "focus-input100"></span>
</div>
<div class = "flex-sb-m w-full p-b-48">
<div>
</div>
</div>
<div class = "d-flex align-items-center container-login100-form-btn">
<a class = "login100-form-btn" >
<button type = "submit" name = "action" class = "login100-form-btn">
Verify
</button>
</a>
</div>
</form>
Это мой отчет.blade.php
<form >
<table class = "table table-bordered table-striped">
<tr class = "bg-danger text-light">
<th>Patient First Name</th>
<th>Patient Last Name</th>
<th>Patient Address</th>
<th>Patient Contact</th>
<th>Patient BloodGroup</th>
<th>Patient Date-Of-Birth</th>
<th>Patient CNIC</th>
<th>Patient Gender</th>
<th>Patient Blood Pressure Reading</th>
<th>Patient Temperature Reading</th>
<th>Patient ECG Reading</th>
<th>Patient Medical Record</th>
<th>Payment Type</th>
<th>Total Payment</th>
<th>Remaining Payment</th>
</tr>
@if (isset($data))
@foreach($data as $row)
<tr class = "bg-secondary text-light">
<td>{{$row->firstname}}</td>
<td>{{$row->lastname}}</td>
<td>{{$row->address}}</td>
<td>{{$row->contact}}</td>
<td>{{$row->bloodgroup}}</td>
<td>{{$row->dateofbirth}}</td>
<td>{{$row->cnic}}</td>
<td>{{$row->gender}}</td>
<td>{{$row->bp}}</td>
<td>{{$row->temp}}</td>
<td>{{$row->ecg}}</td>
<td>{{$row->prerecord}}</td>
<td>{{$row->ptype}}</td>
<td>{{$row->tpayment}}</td>
<td>{{$row->rpayment}}</td>
</tr>
@endforeach
@endif
</table>
</form>
Насколько я понимаю, когда форма проверки отправляется и в методе выборки проверяется, вы хотите отобразить представление отчета.
Если это правильно, вы можете попробовать следующее
public function fetch(Request $req)
{
$firstname = $req->input('firstname');
$contact=$req->input('contact');
$bloodgroup=$req->input('bloodgroup');
$verify= DB::select('select id from patient_details where firstname=? and contact=? and bloodgroup=?',[$firstname,$contact,$bloodgroup]);
if (count($verify))
{
return $this->report($req);
}
else
{
return response(['message' => 'Failed!'], 400);
}
}
public function report(Request $request)
{
$firstname = $request->input('firstname');
$data = DB::table('patient_details')->where('patient_details.firstname','=',$firstname)
->join('pmedicalreadings','pmedicalreadings.id', '=', 'patient_details.id')
->join('medrecords','medrecords.id','=','patient_details.id')
->join('payments','payments.id','=','patient_details.id')
->select('patient_details.firstname','patient_details.lastname','patient_details.address','patient_details.contact','patient_details.bloodgroup','patient_details.dateofbirth','patient_details.cnic','patient_details.gender','pmedicalreadings.bp','pmedicalreadings.temp','pmedicalreadings.ecg','medrecords.prerecord','payments.ptype','payments.tpayment','payments.rpayment')
->get();
return view('report',compact('data'));
}
Что вы получите, если сделаете dd($firstname, $data)
в функции отчета непосредственно перед оператором возврата
null Illuminate\Support\Collection {#334 ▼ #items: [] }
Это означает, что $request->input('firstname') имеет значение null. Это потому, что вы назвали параметр в методе выборки как $req, а передали $request в отчете $this->report($request)
, хотя он должен быть $this->report($req)
. Обновите ответ, пожалуйста, проверьте и посмотрите, теперь он должен работать. - дайте мне знать, если иначе
все тот же ноль
Означает ли это, что вы по-прежнему получаете нулевую и пустую коллекцию, когда dd($firstname, $data)
непосредственно перед оператором возврата в методе отчета — даже после изменения на return $this->report($req)
в методе выборки?
Да, сэр, я все еще получаю нуль в дд.
Каково значение $firstname, если вы выполняете метод dd($req->input('firstname')
in fetch
сэр, как это сделать dd($req->input('firstname'));
Просто поместите dd($req->input('firstname');
в качестве первого оператора в методе выборки и посмотрите, что вы получите.
сэр, когда я ввожу dd($req->input('firstname'); я показываю запись
не приводит меня к просмотру dd, он показывает запись в таблице
dd($req->input('firstname');
выводит одно строковое значение или null в методе выборки. Если вы получаете нуль, проверьте вид лезвия с формой, есть ли у вас ввод с именем или нет. Verify.blade.php в вашем вопросе не имеет поля ввода с именем = "имя
сэр, я исправил ht name = usernme на name = firstname раньше
теперь я вижу запись, для которой я ввожу имя в режиме проверки
Поместите dd($req->input('firstname');
в качестве первой строки в метод выборки и снова отправьте форму - если она показывает значение, которое вы ввели для имени в форме, затем закомментируйте строку dd в выборке и повторно отправьте форму, она должна работать. Кстати ->join('pmedicalreadings','pmedicalreadings.id','patient_details.id')
должно быть ->join('pmedicalreadings','pmedicalreadings.id', '=', 'patient_details.id')
да, сэр, теперь он работает нормально. большое спасибо
В вашей конкретной ситуации я бы использовал сеансы. я бы сделал
public function fetch(Request $req)
{
$firstname = $req->input('firstname');
$contact=$req->input('contact');
$bloodgroup=$req->input('bloodgroup');
$verify= DB::select('select id from patient_details where firstname=? and contact=? and bloodgroup=?',[$firstname,$contact,$bloodgroup]);
if (count($verify))
{
session()->put('current_report_name', $firstname);
return redirect('report');
}
else
{
echo "failed";
}
}
public function report()
{
$firstname = session()->get('current_report_name');
$data = DB::table('patient_details')->where('patient_details.firstname','=',$firstname)
->join('pmedicalreadings','pmedicalreadings.id','patient_details.id')
->join('medrecords','medrecords.id','=','patient_details.id')
->join('payments','payments.id','=','patient_details.id')
->select('patient_details.firstname','patient_details.lastname','patient_details.address','patient_details.contact','patient_details.bloodgroup','patient_details.dateofbirth','patient_details.cnic','patient_details.gender','pmedicalreadings.bp','pmedicalreadings.temp','pmedicalreadings.ecg','medrecords.prerecord','payments.ptype','payments.tpayment','payments.rpayment')
->get();
return view('report',compact('data'));
}
Однако вы можете извлекать и отображать данные с одного и того же маршрута, разделяя их, как это необычно, но в вашем конкретном случае использования я бы сказал, что это будет нормально. Это просто означает, что если пользователь выбирает другого пользователя и возвращается к предыдущей открытой вкладке и обновляется, старая вкладка станет последним выбранным пользователем.
Сэр, он ничего не отображает в таблице. Представление таблицы отображается, но данные не извлекаются.
Извините, игнорируйте последнюю часть, где я частично обрезал маршруты. Вы должны использовать свои маршруты
Сэр, я сохранил маршруты прежними
Также похоже, что ваш veridy.blade.php не имеет правильных входных данных для вашей выборки (например, у вас есть имя пользователя вместо имени)
Вы можете не получить никакого результата, потому что у вас так много объединений. Соединение покажет результаты только в том случае, если в этих таблицах есть и другие результаты. Мейн, ты хочешь левое соединение
Да, сэр, я только что заметил, что исправил это, и он все еще показывает ноль в дд.
Попробуйте несколько тестов, в которых вы удаляете объединения, и посмотрите, получите ли вы результат в функции отчета контроллера. Также проверьте, что $firstname не пусто с помощью echo или dd
сэр, если я использую левое соединение, я не получаю результатов в своем отчете, я пробовал это несколько раз ранее. только когда я присоединялся ко всем местам, все результаты отображались
Присоединиться означает найти основную таблицу (сведения о пациенте) только в том случае, если все другие таблицы, к которым вы присоединяетесь, существуют. Левое соединение означает получение, даже если соединения не завершаются.
Если вы выполняете отладку на каждом этапе с помощью dd(), чтобы точно увидеть, в какой момент информация больше не отображается, вы найдете основную причину.
Хорошо, сэр, я пытаюсь это
Сэр, я изменил соединение 2 внизу на левое соединение, и оно показывает мне результат для всех таблиц. То есть проблем с присоединением нет?
Сэр, там написано, что требуется неопределенная переменная. Я также изменил запрос на запрос, затем он отображает таблицу, но таблица пуста.