Невозможно автоматически заполнить форму при попытке редактирования – CRUD

Здравствуйте, я пытался использовать функцию редактирования из Laravel CRUD с ресурсом. Проблема, с которой я столкнулся, заключается в том, что форма не заполняет старые данные, которые я уже создал с помощью value = "{{ old('kodecust', $customer->kodecust ) }}"````` or `````value = "{{ $customer->kodecust ) }}". Другие функции, такие как чтение, удаление и создание, работают, за исключением обновления/редактирования.

Вот мой маршрут:

Route::resource('/customer/mastercustomer', CustomerController::class)->except(['destroy'])->middleware("auth");
Route::delete('/customer/mastercustomer/{customer:perusahaancust}', [CustomerController::class, 'destroy'])->middleware('auth');

Мой контроллер:

public function edit(Customer $customer)
    {

        return view('Master\Customer\editcustomer', [
            "customer" => $customer,
            "title" => "Edit Customer"
        ]);
    }

public function update(Request $request, Customer $customer)
    {
        $validatedData = $request->validate([
            'kodecust' => 'required|string|max:15',
            'perusahaancust' => 'required|string|max:255',
            'kontakcust' => 'required|string|max:100',
            'kotacust' => 'required|string|max:255',
            'alamatcust' => 'required|string|max:255',
            'alamat2cust' => 'nullable|string|max:255',
            'notelponcust' => 'required|string|max:30',
            'termcust' => 'required|integer',
            'limitcust' => 'required',
            'desccust' => 'nullable|string|max:50',
        ]);

        Customer::where('perusahaancust', $customer->perusahaancust)
                ->update($validatedData);

        return redirect('/customer/mastercustomer')->with('success', 'Berhasil Edit Customer!');
    }

И мое мнение:

<tr>
                            <td><label for = "kodecust">Kode</label></td>
                            <td>
                                <input type = "text" name = "kodecust" id = "kodecust" value = "{{ old('kodecust', $customer->kodecust ) }}" required style = "width: 50px"
                                    @error('kodecust') class = "is-invalid" @enderror>
                                @error('kodecust')
                                    <div class = "invalid-feedback">{{ $message }}</div>
                                @enderror
                            </td>
                            <td><label for = "perusahaancust">Perusahaan</label></td>
                            <td>
                                <input type = "text" name = "perusahaancust" id = "perusahaancust" value = "{{ old('perusahaancust', $customer->perusahaancust) }}" required
                                    style = "width: 200px" @error('perusahaancust') class = "is-invalid" @enderror>
                                @error('perusahaancust')
                                    <div class = "invalid-feedback">{{ $message }}</div>
                                @enderror
                            </td>
                        </tr>
                        <tr>
                            <td><label for = "kontakcust">Kontak</label></td>
                            <td>
                                <input type = "text" name = "kontakcust" id = "kontakcust" value = "{{ old('kontakcust', $customer->kontakcust) }}" required style = "width: 100px"
                                    @error('kontakcust') class = "is-invalid" @enderror>
                                @error('kontakcust')
                                    <div class = "invalid-feedback">{{ $message }}</div>
                                @enderror
                            </td>
                            <td><label for = "kotacust">Kota</label></td>
                            <td>
                                <input type = "text" name = "kotacust" id = "kotacust" value = "{{ old('kotacust', $customer->kotacust) }}" required style = "width: 150px"
                                    @error('kotacust') class = "is-invalid" @enderror>
                                @error('kotacust')
                                    <div class = "invalid-feedback">{{ $message }}</div>
                                @enderror
                            </td>
                        </tr>

Дайте мне знать, если вы, ребята, хотите увидеть больше моего кода. Буду признателен за любую помощь, спасибо!

Использование dd($customer); результата ini:

App\Models\Customer {#1407 ▼ // app\Http\Controllers\CustomerController.php:73
  #connection: null
  #table: "customers"
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  +preventsLazyLoading: false
  #perPage: 15
  +exists: false
  +wasRecentlyCreated: false
  #escapeWhenCastingToString: false
  #attributes: []
  #original: []
  #changes: []
  #casts: []
  #classCastCache: []
  #attributeCastCache: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: []
  #touches: []
  +timestamps: true
  +usesUniqueIds: false
  #hidden: []
  #visible: []
  #fillable: []
  #guarded: array:1 [▼
    0 => "id"
  ]
}

Это пустое поле или вы получаете какую-либо ошибку, пока форма не заполняется? Вы уверены, что импортировали правильную модель в верхнюю часть контроллера use App\Model\Customer? какую версию laravel вы используете?

Subha 05.06.2024 08:51

@Subha, ошибка не выдается, она просто пустая, и я использую Laravel 11. Да, у меня уже есть use App\Models\Customer; на моем клиентском контроллере

NyK 05.06.2024 08:53

Вы имеете в виду, что форма редактирования загружена, но поле формы пусто. Верно? Вы уверены, что $customer возвращает данные? Если соответствия Id нет, то $customer вернет null по умолчанию.

Subha 05.06.2024 08:55

@Subha возвращает данные, потому что я использую функцию чтения, и она работает отлично. это чем-то отличается от этого?

NyK 05.06.2024 09:00

Пробовали ли вы этот dd($customer) внутренний edit(... метод, чтобы проверить, возвращает ли он ожидаемые данные.

Subha 05.06.2024 09:03

да, к сожалению, использование dd не дает никаких данных, я обновил результат dd в своем вопросе

NyK 05.06.2024 09:07

Просто подтвердите, что вы уверены, что получаете результат против действительного id?

Subha 05.06.2024 09:11

@Субха, да, я уверен

NyK 05.06.2024 09:15

Хорошо, последнее. Какой столбец модели Customer отображается с помощью $customer? Это id или любой другой столбец? Пожалуйста, уточните.

Subha 05.06.2024 09:20

это perusahaancust

NyK 05.06.2024 09:22

Я опубликовал свой ответ. Пожалуйста, проверьте и дайте мне знать о результате. Спасибо.

Subha 05.06.2024 09:40
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
11
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Я думаю, что есть некоторая проблема с implicit-model-binding с Resource- Controller. Потому что model-binding извлекает запись id, чего в вашем случае нет. Так что не используйте implicit-model-binding, пока не узнаете, в чем проблема. Вместо этого вы попробуйте это.

public function edit($customer)
{

        $results = Customer::where('perusahaancust', $customer)->first();

        return view('Master\Customer\editcustomer', [
            "customer" => $results,
            "title" => "Edit Customer"
        ]);
}

Перед использованием приведенного выше кода ознакомьтесь со следующими примечаниями.

  1. В вашем Customer модельном классе есть protected $table = 'table-name-in DB'. Иногда соглашение об именах также приводит к ошибке.
  2. Попробуйте dd($customer) увидеть, что он возвращает одно значение, для которого Запись БД будет получена.

Если вышеупомянутые два условия соблюдены, я надеюсь, что код будет работать. Если нет, пожалуйста, дайте мне знать.

Для метода update(...) сделайте это.

public function update(Request $request, $customer)
    {
        $results = Customer::where('perusahaancust', $customer)->first();
        $validatedData = $request->validate([
            'kodecust' => 'required|string|max:15',
            'perusahaancust' => 'required|string|max:255',
            'kontakcust' => 'required|string|max:100',
            'kotacust' => 'required|string|max:255',
            'alamatcust' => 'required|string|max:255',
            'alamat2cust' => 'nullable|string|max:255',
            'notelponcust' => 'required|string|max:30',
            'termcust' => 'required|integer',
            'limitcust' => 'required',
            'desccust' => 'nullable|string|max:50',
        ]);

        Customer::where('perusahaancust', $results->perusahaancust)
                ->update($validatedData);

        return redirect('/customer/mastercustomer')->with('success', 'Berhasil Edit Customer!');
    }

Не используйте неявное model-binding. Я уже упоминал об этом раньше. Попробуйте это. Надеюсь, это сработает.

Вы правы, и теперь все работает, большое спасибо, но если вы не возражаете, у меня другая проблема. сначала он показывает: «Метод PUT не поддерживается для маршрута клиента/главного клиента. Поддерживаемые методы: GET, HEAD, POST». ошибку, и я исправил ее, добавив $customer->perusahaancust в форму Action. но теперь, когда я редактирую любое значение, оно ничего не меняет

NyK 05.06.2024 10:00

Если это работает, пожалуйста, проголосуйте. Что вы редактируете? Какое значение не меняется? Можете ли вы объяснить? вы использовали это $customer->perusahaancust в форме редактирования?

Subha 05.06.2024 10:19

@NyK Можете ли вы поделиться тегом <form>, где вы использовали $customer->perusahaancust? Пожалуйста, укажите, это форма редактирования?

Subha 05.06.2024 10:45

я просто проверял, могу ли я редактировать какую-либо информацию о клиенте, но ничего не меняется. я обновил свой вопрос, включив в него public function update на контроллере

NyK 05.06.2024 10:46

@NyK, я обновил свой ответ для public function update. Пожалуйста, проверьте и дайте мне знать. И, пожалуйста, примите ответ и проголосуйте, если это работает.

Subha 05.06.2024 11:08

Я принял ваш ответ, хотя у меня другая проблема. Каким-то образом теперь каждое значение имеет ошибку «Попытка прочитать свойство по нулю». я ничего не менял со вчерашнего дня

NyK 06.06.2024 00:58

@Nyk, ты получаешь ошибку для функции обновления? Вы пробовали приведенный выше код для update(), который я упомянул в ответе, отредактировав его??пожалуйста, попробуйте и дайте мне знать

Subha 06.06.2024 03:40

@NyK, не могли бы вы показать мне блок кода о том, как вы передаете id за update() и это route определение? И укажите, пожалуйста, когда и в какой строке вы получаете упомянутую вами ошибку.

Subha 06.06.2024 03:46

@NyK, я изменил update() точно так же, как ваш ответ. Мое определение маршрута по-прежнему такое же, как в моем вопросе выше. И строка ошибки есть для каждого значения, например value = "{{ old('kodecust', $customer->kodecust ) }}", и когда я даю ?? '', появляется еще одна ошибка в value = "{{ old('perusahaancust', $customer->perusahaancust ) }}" и так далее.

NyK 06.06.2024 08:42

@NyK, это значит, что функция update() не работает. Верно? имеет ли столбец perusahaancust уникальное значение в каждой записи? если функция update() не работает, выполните dd($results) после $results=.., чтобы убедиться, что она возвращает ожидаемый результат. Дайте мне знать, что вы получили.

Subha 06.06.2024 08:59
dd($results) вернулся с нулем. И perusahaancust не имеет уникальной ценности.
NyK 06.06.2024 13:57

вот почему он не работает... это все внутри update() я имею в виду, выполняли ли вы dd($results) внутри update() метод?

Subha 06.06.2024 13:57

Мне очень жаль, если я вас запутал, но я думаю, что проблема теперь вернулась к функции редактирования, потому что я получил Attempt to read property on null после того, как нажал кнопку редактирования. я попробовал dd($customer); он вернул результат, как в моем вопросе выше (я обновил его), и dd($results) дал мне ноль

NyK 06.06.2024 14:12

@NyK, Хорошо... позвольте мне суммировать все пункты.. 1) Сначала вы должны передать unique-field для редактирования и обновления. пожалуйста, передайте id вместо perusahaancust . 2)Внимательно проверьте, как вы прошли field действие формы? 3) У меня еще одно замешательство: сначала вы сказали мне, что это работает, а затем почему сейчас оно не работает. Я на 100% уверен, что что-то не так с field (т. е. perusahaancust.id). Если это поле не передано правильно код не будет работать. пожалуйста, дайте мне знать ваше мнение после рассмотрения всех пунктов, которые я упомянул.

Subha 06.06.2024 15:03

@NyK, если хочешь, я создам чат и решу твою проблему. Мне нужно увидеть твою форму, контроллер и маршрут.

Subha 06.06.2024 15:04

да, конечно, у меня нет проблем с этим

NyK 07.06.2024 05:25

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