提问人:Conlaodh Quinn 提问时间:1/12/2022 更新时间:1/12/2022 访问量:451
使用 Laravel 从表单更新数据库记录 - 请求不拉取变量
Updating database records from a form using Laravel - Request not pulling variable
问:
我是Laravel的新手,我正在尝试通过表单更新授予人的详细信息,但是数据库表中的记录没有注册任何更改。问题似乎与请求未拾取存储在变量中的数据有关,因为当代码替换为 时,数据库表确实更新为“updated_data”字符串。为了清楚起见,我将包含现有代码的片段。对此问题的任何帮助将不胜感激!$grantor->grantor_name= $request->input('grantor_name');
$grantor->grantor_name= "updated_data";
授予者控制器文件
public function update(Request $request, $id)
{
$grantor = Grantor::find($id);
$grantor->grantor_name= $request->input('grantor_name');
$grantor->save();
Grantors.edit.blade 文件
<div class="flex-1 px-10">
<form method="post" action="{{route('grantors.update', $grantor->id )}}" class="is-readonly">
@csrf
<div class="row">
@if ($errors->any()) <span>{{ $errors }}</span> @endif
</div>
<div class="h-auto md:h-96">
<!-- item -->
<div x-data=" {isOpen : false} " class="pt-2 pb-4 border-b border-divider">
<div @click="isOpen = !isOpen"
class="flex items-center cursor-pointer text-neutral-darker hover:text-primary-hover"
:class="{'font-bold' : isOpen}">
<span class="text-xl md:xl">Grantor Details</span>
<img class="mb-1 duration-300 ml-4 inset-0 h-6 w-6" :class="{'transform rotate-180' : isOpen}"
src="../../img/icon-arrow-down.png" alt="Dropdown-arrow">
</div>
<div x-show.transition.duration.300ms.origin.bottom="isOpen" x-cloak @click.away="isOpen = false"
class="pt-3 text-sm text-neutral">
@if($is_editable)
<div class="flex justify-end">
<button type="button" class="btn btn-default btn-edit js-edit"><img class="mb-1 duration-300 ml-4 inset-0 h-6 w-6" src="../../img/edit-icon.svg" alt="edit icon"></button>
<button type="button" class="btn btn-default btn-save js-save"><img class="mb-1 duration-300 ml-4 inset-0 h-6 w-6" src="../../img/save-icon.svg" alt="save icon"></button>
</div>
@endif
<form class="w-full">
<div class="px-6 sm:px-6">
<div class="md:flex items-center">
<div class="w-full md:w-1/2 flex flex-col">
<div class="md:flex md:items-center">
<label for="grantor_name" class="font-bold text-neutral-darker leading-none pr-4" for="inline-full-name" disabled>Grantor/ Company/ Organisation Name *</label>
<input class="leading-none text-gray-900 py-2 px-4 w-80 focus:outline-none focus:border-blue-700 mt-4 bg-gray-100 border rounded border-gray-200 is-disabled @error('grantor_name') is-invalid @enderror" name="grantor_name" value="{{ $grantor->grantor_name }}" id="grantor_name" type="text" disabled >
</div>
</div>
</div>
租户路由文件
Route::get('/grantors/{id}/edit', [App\Http\Controllers\GrantorController::class, 'edit'])->name('grantors.edit');
Route::post('/grantors/{id}/update', [App\Http\Controllers\GrantorController::class, 'update'])->name('grantors.update');
设保人模型
protected $table = 'grantors';
protected $fillable= [
'grantor_name'
]);
答:
1赞
Peppermintology
1/12/2022
#1
您应用了该属性,因此不会作为表单提交的一部分传递。删除,然后提交加号。grantor_name
input
disabled
disabled
input
value
如果您不希望用户修改该值,请替换为 .disabled
readonly
此外,请确保它具有值。value="{{ $grantor->grantor_name }}"
编辑
我刚刚注意到您在输入之前还有一个额外的嵌套标签。不要嵌套元素,因此请将其删除。form
grantor_name
form
删除嵌套在外部标签内的所有标签。所以基本上任何里面的form
form
<form method="post" action="{{route('grantors.update', $grantor->id )}}" class="is-readonly">
我可以在您的示例中看到的是
<form class="w-full">
就在你的下面,在你之前。@endif
grantor_name
input
然后再次进行一些调试,以检查是否有一对。$request->input()
key/value
grantor_name
评论
0赞
Conlaodh Quinn
1/12/2022
谢谢,我删除了该属性,但错误“SQLSTATE[23000]:完整性约束违规:1048 列”grantor_name“不能为空(SQL:更新授予者设置grantor_name = ?,grantors.updated_at = 2022-01-12 10:18:54 where id = 2)”仍在返回 - 我觉得问题是 $grantor->grantor_name 中的值没有被拉通, 但是,在编辑页面上,这些字段都预填充了数据库表中的当前字段,因此我不知道为什么它没有获取此值disabled
0赞
Peppermintology
1/12/2022
@ConlaodhQuinn我已经对我的答案进行了编辑,因为我注意到在您的代码中有一个我以前没有注意到的额外标签。form
0赞
Conlaodh Quinn
1/12/2022
感谢您到目前为止的帮助,您介意在我的代码中突出显示应该删除的标签吗?form
0赞
Conlaodh Quinn
1/12/2022
再次感谢您的编辑,我已经删除了额外的表单标签,但仍然收到相同的错误 - 是否有可能与无法访问数据有关的原因?据我所知,该表单正在工作并使用字符串更新数据库,而不是使用值$request
$grantor->grantor_name
$grantor->grantor_name
0赞
Peppermintology
1/12/2022
@ConlaodhQuinn 您需要检查对象中的值。在函数的开头执行 a,并检查是否存在 的元素以及它是否具有预期值。如果您在输出中没有看到,则由于某种原因,您的表单未提交该输出。grantor_name
$request
dd($request->input());
update
grantor_name
grantor_value
评论
$grantor->grantor_name= $request->input('grantor_name');
grantors
grantor_name
grantors
updated_at
id
$grantor->grantor_name= $request->input('grantor_name');
$grantor->grantor_name= "updated_data";
dd($request->input())
[]