英文:
Laravel 10 can't update data
问题
我无法运行代码,但可以为您提供代码的翻译和可能的解决方案。
这是您提供的代码的翻译:
// 控制器
public function update(Request $request, string $id): RedirectResponse
{
//
$input = $request->validate([
'id' => 'required',
'name' => 'required',
'description' => 'required',
]);
$accounting_group = AccountingGroup::findOrFail($id);
$accounting_group->update($input);
return redirect()->route('accounting_group.index')->with(['success' => '数据已保存']);
}
<!-- 路由 -->
Route::resource('accounting_group', AccountingGroupController::class)->except(['show']);
<!-- 模型 -->
class AccountingGroup extends Model
{
use HasFactory;
protected $table = 'accounting_groups';
protected $fillable = [
'id',
'name',
'description',
];
protected $hidden = [];
public function transactionaccount(): HasMany
{
return $this->hasMany(TransactionAccount::class);
}
}
<form method="post" class="mx-2 p-4" action="{{ route('accounting_group.update', $accounting_group->id) }}">
@csrf
@method('put')
<div class="form-group">
<label for="id">ID Akun</label>
<input type="text" class="form-control" id="id" placeholder="ID accounting..." value="{{ old('id', $accounting_group->id) }}">
</div>
<!-- ...其他表单字段... -->
<div class="d-flex justify-content-end">
<button type="submit" class="btn btn-primary">保存</button>
</div>
</form>
根据您提供的代码,您遇到了两个问题:
- 您没有看到Laravel中的错误显示。
- 数据在MySQL中没有更新。
对于问题1,确保在Laravel的配置文件中启用了错误显示,通常在 .env
文件中将 APP_DEBUG
设置为 true
。
对于问题2,您的表单中使用了 @method('put')
来指定使用PUT请求进行更新。请确保您的路由支持PUT请求,并且在路由定义中使用了update
操作。另外,也要确保您的数据库连接正确,并且在更新之后没有其他操作导致数据被还原或覆盖。
如果问题仍然存在,您可能需要查看Laravel的日志文件以获取更多详细信息,以便进一步调试。
英文:
i can't update table data in laravel 10 with controller resource
my code:
// controller
public function update(Request $request, string $id):RedirectResponse
{
//
$input = $request->validate([
'id'=>'required',
'name'=>'required',
'description'=>'required',
]);
$accounting_group = AccountingGroup::findOrFail($id);
$accounting_group->update($input);
return redirect()->route('accounting_group.index')->with(['success' => 'Data telah disimpan']);
}
<!-- route -->
Route::resource('accounting_group', AccountingGroupController::class)->except(['show']);
<!-- model -->
class AccountingGroup extends Model
{
use HasFactory;
protected $table = 'accounting_groups';
protected $fillable = [
'id',
'name',
'description',
];
protected $hidden = [];
public function transactionaccount(): HasMany
{
return $this->hasMany(TransactionAccount::class);
}
}
<form method="post" class="mx-2 p-4" action="{{ route('accounting_group.update', $accounting_group->id) }}">
@csrf
@method('put')
<div class="form-group">
<label for="id">ID Akun</label>
<input type="text" class="form-control" id="id" placeholder="ID accounting..." value="{{ old('id', $accounting_group->id) }}">
</div>
....
<div class="d-flex justify-content-end">
<button type="submit" class="btn btn-primary">Simpan</button>
</div>
</form>
i didn't get eror display in laravel, i got refresh page where i clicked sumbit button and in mysql the data get no update
答案1
得分: 1
为了允许浏览器发送输入,您需要在您的输入字段中添加name
属性。
所以您只需要将name="id"
添加到您的代码中:
<input type="text" class="form-control" id="id" name="id" placeholder="ID accounting..." value="{{ old('id', $accounting_group->id) }}">
并且不要忘记为其他字段添加name
属性,如name="name"
和name="description"
。
英文:
To allow browser send input, you need to add you name
attribute in your input for.
So you just need to add name="id"
to your:
<input type="text" class="form-control" id="id" placeholder="ID accounting..." value="{{ old('id', $accounting_group->id) }}">
so your code should be:
<input type="text" class="form-control" id="id" name="id" placeholder="ID accounting..." value="{{ old('id', $accounting_group->id) }}">
and don't forgot to add name
attribute to other fields like name="name"
and name="description"
答案2
得分: 1
当您使用Route::resource并调用show或update方法时,您将在控制器函数中获得请求的ID,称为属性提升。
在这里,我已经增强了您的代码:
public function update(Request $request, AccountingGroup $accounting_group): RedirectResponse
{
$input = $request->validate([
'name' => 'required',
'description' => 'required',
]);
$accounting_group->update($input->validated());
return redirect()->route('accounting_group.index')->with(['success' => 'Data telah disimpan']);
}
我在参数中添加了AccountingGroup $accounting_group。如果找不到这个ID记录,那么会调用ModelNotFoundException。
我添加了**$input->validated()**,这个方法只用于返回经过验证的数据,用于安全目的。
英文:
When you are using Route::resource and call the show or update method then you will get the requested ID in the record in the controller function it is called property promotion
Here I have enhanced your code
public function update(Request $request, AccountingGroup $accounting_group):RedirectResponse
{
$input = $request->validate([
'name'=>'required',
'description'=>'required',
]);
$accounting_group->update($input->validated());
return redirect()->route('accounting_group.index')->with(['success' => 'Data telah disimpan']);
}
> I have added the AccountingGroup $accounting_group in the
> argument. If this id record is not found then call the
> ModelNotFoundException
> And I have added the $input->validated() this method is only for
> returning the validated data, It's used for security purposes.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论