(При необходимости переведите с испанского на английский)
У меня есть таблица с несколькими отношениями, таблица «reservas» имеет 1 отношение с 3 таблицами, но эти таблицы имеют другие отношения.
Я объясню это:
Таблица «Резервы» имеет связь с таблицей «Врач», таблицей «Типо_Консалта» и таблицей «Клиенты».
Другие таблицы и их отношения объясняются с помощью следующего SQL-запроса.
SELECT id_consulta AS 'ID CITA', CONCAT(medicos.nombre,' ',medicos.apellidos) AS 'MEDICO', area_salud.nombre_area AS 'TIPO CONSULTA', fecha_consulta AS 'FECHA', hora_consulta AS 'HORARIO', CONCAT(clientes.nombre,' ',clientes.apellidos) AS 'PACIENTES', sala AS 'SALA',estado_reserva AS 'ESTADO DE LA RESERVA'
FROM reservas
INNER JOIN tipo_consulta ON reservas.tipo_consulta_id = tipo_consulta.id_tipo_consulta
INNER JOIN area_salud ON tipo_consulta.area_medicina = area_salud.id_area
INNER JOIN medicos ON reservas.doctor_id = medicos.id_doctor
INNER JOIN clientes ON reservas.paciente_id = clientes.id_paciente
ORDER BY id_consulta ASC;
«Reservas» — это основная таблица этого запроса. Я использую тот же SQL-запрос в LARAVEL с QueryBuilder. Мне легче. Я хочу отредактировать строку, используя отношение, поэтому я не редактирую только таблицу «reservas» без использования отношений таблицы.
Я думаю, что мой код неверен. Я получаю нулевое значение, и представление показывает мне следующую ошибку.
Я попытаюсь показать значения из выбранной строки, у меня есть предыдущая таблица, в которой показаны все строки из таблицы «reservas». Следующий код взят из файла edit-view.
<form method = "POST" action = "{{route('UpdateCitas', $reservas->id_consulta)}}" enctype = "multipart/form-data">
@csrf
@method('PUT')
<div class = "row">
<div class = "col-xs-12 col-sm-12 col-md-12">
<div class = "form-group">
<x-input-label for = "MedicoActual" :value = "__('Medico a cargo')" style = "font-size: 16px;"/>
<input type = "text" name = "MedicoActual" value = "{{$cita->nombre_doctor}}" class = "form-control"
placeholder = "Doctor's name">
</div>
</div>
<input class = "btn btn-outline-primary" type = "submit" value = "ACTUALIZAR">
</div>
</form>
Мне не нужно использовать @foreach, я думаю, что не нужно, но я не понимаю, что я могу сделать.
Теперь я покажу строку кода, которая дает мне нулевое значение. Является ли контроллер функцией редактирования.
public function edit(Reservas $reservas){
$cita = DB::table('reservas')
->join('tipo_consulta', 'reservas.tipo_consulta_id', '=', 'tipo_consulta.id_tipo_consulta')
->join('area_salud', 'tipo_consulta.area_medicina','=','area_salud.id_area')
->join('medicos','reservas.doctor_id','=','medicos.id_doctor')
->join('clientes','reservas.paciente_id','=','clientes.id_paciente')
->selectRaw("CONCAT(medicos.nombre,' ',medicos.apellidos) AS nombre_doctor, id_consulta,nombre_area, valor_consulta,fecha_consulta,hora_consulta,clientes.nombre,clientes.apellidos,sala,estado_reserva")
->where('reservas.id_consulta', '=', $reservas)->get();
return view('forms.editar-citas', compact('cita', 'reservas'));
}
Переменная $reservas должна быть id из таблицы «reservas», идентификатор называется id_consulta, но имеет значение null, URL-адрес имеет правильный номер идентификатора. Что я могу сделать?
Помните, сейчас я пытаюсь показать значение имени Доктора во входных данных. Спасибо!






Метод get() вернет коллекцию. Если вы хотите получить запись, используйте вместо этого метод first()
public function edit(Reservas $reservas){
$cita = DB::table('reservas')
->join('tipo_consulta', 'reservas.tipo_consulta_id', '=', 'tipo_consulta.id_tipo_consulta')
->join('area_salud', 'tipo_consulta.area_medicina','=','area_salud.id_area')
->join('medicos','reservas.doctor_id','=','medicos.id_doctor')
->join('clientes','reservas.paciente_id','=','clientes.id_paciente')
->selectRaw("CONCAT(medicos.nombre,' ',medicos.apellidos) AS nombre_doctor, id_consulta,nombre_area, valor_consulta,fecha_consulta,hora_consulta,clientes.nombre,clientes.apellidos,sala,estado_reserva")
->where('reservas.id_consulta', '=', $reservas-> id_consulta)->first();
return view('forms.editar-citas', compact('cita', 'reservas'));
}
Вы должны проверить $cita, чтобы увидеть, является ли оно нулевым
<input type = "text" name = "MedicoActual" value = "{{$cita ? $cita->nombre_doctor : ''}}" class = "form-control"
placeholder = "Doctor's name">
Да, потому что $cita равно null. Убедитесь, что он существует в базе данных
Я уже объяснил, что эта строка кода -> public function edit(Reservas $reservas) в контроллере должна иметь значение id из таблицы Reservas в соответствии с предыдущей выбранной записью из таблицы в представлении, $cita — это локальная переменная, целью которой является отображение значений sql-запрос по выбранной записи из предыдущей таблицы (в представлении). Например, если $reservas имеет значение 4, то запрос должен показать конкретный результат. И следующая строка кода должна быть where('reservas.id_consulta', '=', 4)->first();. Вот что я пытаюсь.
Вы доступны? Я до сих пор не могу найти решение своей проблемы.
Я отредактировал свой ответ. Это должно быть ->where('reservas.id_consulta', '=', $reservas-> id_consulta
Прежде всего, мне пришлось сделать дополнительный шаг, чтобы найти решение. Я изменил свой маршрут: Route::get('/citas/editar/',[ReservasController::class, 'edit'])->name('reservas.edit'); на этот: Route::get('/citas/editar/{reservas}',[ReservasController::class, 'edit'])->name('reservas.edit');. И теперь это работает! Но ваш ответ натолкнул меня на мысль, спасибо!
Спасибо!! Но теперь я получил еще одну ошибку, и она говорит: Попытка прочитать свойство «nombre_doctor» с нулевым значением. Я сказал, что переменная
$reservasимеет нулевое значение.