CRUD Laravel с QueryBuilder не может отображаться в режиме редактирования

(При необходимости переведите с испанского на английский)

У меня есть таблица с несколькими отношениями, таблица «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-адрес имеет правильный номер идентификатора. Что я могу сделать?

Помните, сейчас я пытаюсь показать значение имени Доктора во входных данных. Спасибо!

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Метод 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">

Спасибо!! Но теперь я получил еще одну ошибку, и она говорит: Попытка прочитать свойство «nombre_doctor» с нулевым значением. Я сказал, что переменная $reservas имеет нулевое значение.

M4uriXD 26.04.2023 01:20

Да, потому что $cita равно null. Убедитесь, что он существует в базе данных

Khang Tran 26.04.2023 03:07

Я уже объяснил, что эта строка кода -> public function edit(Reservas $reservas) в контроллере должна иметь значение id из таблицы Reservas в соответствии с предыдущей выбранной записью из таблицы в представлении, $cita — это локальная переменная, целью которой является отображение значений sql-запрос по выбранной записи из предыдущей таблицы (в представлении). Например, если $reservas имеет значение 4, то запрос должен показать конкретный результат. И следующая строка кода должна быть where('reservas.id_consulta', '=', 4)->first();. Вот что я пытаюсь.

M4uriXD 27.04.2023 00:03

Вы доступны? Я до сих пор не могу найти решение своей проблемы.

M4uriXD 30.04.2023 02:27

Я отредактировал свой ответ. Это должно быть ->where('reservas.id_consulta', '=', $reservas-> id_consulta

Khang Tran 30.04.2023 02:33

Прежде всего, мне пришлось сделать дополнительный шаг, чтобы найти решение. Я изменил свой маршрут: Route::get('/citas/editar/',[ReservasController::class, 'edit'])->name('reservas.edit'); на этот: Route::get('/citas/editar/{reservas}',[ReservasController::c‌​lass, 'edit'])->name('reservas.edit');. И теперь это работает! Но ваш ответ натолкнул меня на мысль, спасибо!

M4uriXD 05.05.2023 00:13

Другие вопросы по теме