Здравствуйте, я пытался использовать функцию редактирования из 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"
]
}
@Subha, ошибка не выдается, она просто пустая, и я использую Laravel 11. Да, у меня уже есть use App\Models\Customer;
на моем клиентском контроллере
Вы имеете в виду, что форма редактирования загружена, но поле формы пусто. Верно? Вы уверены, что $customer
возвращает данные? Если соответствия Id
нет, то $customer
вернет null
по умолчанию.
@Subha возвращает данные, потому что я использую функцию чтения, и она работает отлично. это чем-то отличается от этого?
Пробовали ли вы этот dd($customer)
внутренний edit(...
метод, чтобы проверить, возвращает ли он ожидаемые данные.
да, к сожалению, использование dd не дает никаких данных, я обновил результат dd в своем вопросе
Просто подтвердите, что вы уверены, что получаете результат против действительного id
?
@Субха, да, я уверен
Хорошо, последнее. Какой столбец модели Customer
отображается с помощью $customer
? Это id
или любой другой столбец? Пожалуйста, уточните.
это perusahaancust
Я опубликовал свой ответ. Пожалуйста, проверьте и дайте мне знать о результате. Спасибо.
Я думаю, что есть некоторая проблема с 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"
]);
}
Перед использованием приведенного выше кода ознакомьтесь со следующими примечаниями.
Customer
модельном классе есть protected $table = 'table-name-in DB'
.
Иногда соглашение об именах также приводит к ошибке.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. но теперь, когда я редактирую любое значение, оно ничего не меняет
Если это работает, пожалуйста, проголосуйте. Что вы редактируете? Какое значение не меняется? Можете ли вы объяснить? вы использовали это $customer->perusahaancust
в форме редактирования?
@NyK Можете ли вы поделиться тегом <form>
, где вы использовали $customer->perusahaancust
? Пожалуйста, укажите, это форма редактирования?
я просто проверял, могу ли я редактировать какую-либо информацию о клиенте, но ничего не меняется. я обновил свой вопрос, включив в него public function update
на контроллере
@NyK, я обновил свой ответ для public function update
. Пожалуйста, проверьте и дайте мне знать. И, пожалуйста, примите ответ и проголосуйте, если это работает.
Я принял ваш ответ, хотя у меня другая проблема. Каким-то образом теперь каждое значение имеет ошибку «Попытка прочитать свойство по нулю». я ничего не менял со вчерашнего дня
@Nyk, ты получаешь ошибку для функции обновления? Вы пробовали приведенный выше код для update()
, который я упомянул в ответе, отредактировав его??пожалуйста, попробуйте и дайте мне знать
@NyK, не могли бы вы показать мне блок кода о том, как вы передаете id
за update()
и это route
определение? И укажите, пожалуйста, когда и в какой строке вы получаете упомянутую вами ошибку.
@NyK, я изменил update()
точно так же, как ваш ответ. Мое определение маршрута по-прежнему такое же, как в моем вопросе выше. И строка ошибки есть для каждого значения, например value = "{{ old('kodecust', $customer->kodecust ) }}"
, и когда я даю ?? ''
, появляется еще одна ошибка в value = "{{ old('perusahaancust', $customer->perusahaancust ) }}"
и так далее.
@NyK, это значит, что функция update()
не работает. Верно? имеет ли столбец perusahaancust
уникальное значение в каждой записи? если функция update()
не работает, выполните dd($results)
после $results=..
, чтобы убедиться, что она возвращает ожидаемый результат. Дайте мне знать, что вы получили.
dd($results)
вернулся с нулем. И perusahaancust не имеет уникальной ценности.
вот почему он не работает... это все внутри update()
я имею в виду, выполняли ли вы dd($results)
внутри update()
метод?
Мне очень жаль, если я вас запутал, но я думаю, что проблема теперь вернулась к функции редактирования, потому что я получил Attempt to read property on null
после того, как нажал кнопку редактирования. я попробовал dd($customer);
он вернул результат, как в моем вопросе выше (я обновил его), и dd($results)
дал мне ноль
@NyK, Хорошо... позвольте мне суммировать все пункты.. 1) Сначала вы должны передать unique-field
для редактирования и обновления. пожалуйста, передайте id
вместо perusahaancust
. 2)Внимательно проверьте, как вы прошли field
действие формы? 3) У меня еще одно замешательство: сначала вы сказали мне, что это работает, а затем почему сейчас оно не работает. Я на 100% уверен, что что-то не так с field
(т. е. perusahaancust
.id
). Если это поле не передано правильно код не будет работать. пожалуйста, дайте мне знать ваше мнение после рассмотрения всех пунктов, которые я упомянул.
@NyK, если хочешь, я создам чат и решу твою проблему. Мне нужно увидеть твою форму, контроллер и маршрут.
да, конечно, у меня нет проблем с этим
Это пустое поле или вы получаете какую-либо ошибку, пока форма не заполняется? Вы уверены, что импортировали правильную модель в верхнюю часть контроллера
use App\Model\Customer
? какую версию laravel вы используете?