尝试更新数据库条目会引发 "A four digit year could not be found Data missing" 异常
Trying to update a DB entry throws "A four digit year could not be found Data missing" exception
我正在 Laravel 中创建一个 CRUD 应用程序,我正在使用默认的 created_at 和 updated_at 列,它们似乎在我插入或更新数据库时自动填充.当从使用已编辑条目的 ID 更改为在我的更新方法中将实际模型条目作为参数拉入时,我偶然发现了异常“InvalidArgumentException
调用 $installer->update(['my field 1', ...]);
时找不到四位数年份数据丢失”
我已经尝试添加我的请求和拉入的 $installer 对象,一切看起来都是正确的,但是以这种方式更新似乎会破坏 updated_at 字段上的更新。以下是相关片段:
我的模型class:
class Installer extends Model
{
protected $guarded = [];
}
我的更新方式:
public function update(Installer $installer) {
request()->validate([
'FirstName' => 'required',
'LastName' => 'required',
'Position' => 'required',
'Status' => 'required',
'EmpId' => 'required'
]);
$installer->update(['FirstName', 'LastName', 'Position', 'Status', 'EmpId']);
return redirect('/installers');
}
我编辑表单的相关部分:
<form method="POST" action="/installers/{{ $installer->id }}" style="margin-bottom: 1em">
@method('PATCH')
@csrf
<div class="field">
<label class="label" for="FirstName">First Name</label>
<div class="control">
<input type="text" class="input" name="FirstName" placeholder="First Name" value="{{ $installer->FirstName }}" required>
</div>
</div>
<div class="field">
<label class="label" for="LastName">Last Name</label>
<div class="control">
<input type="text" class="input" name="LastName" placeholder="Last Name" value="{{ $installer->LastName }}" required>
</div>
</div>
<div class="field">
<label class="label" for=Position">Position</label>
<div class="control">
<input type="text" class="input" name="Position" placeholder="Position" value="{{ $installer->Position }}" required>
</div>
</div>
<div class="field">
<label class="label" for="Status">Status</label>
<div class="control">
<input type="text" class="input" name="Status" placeholder="Status" value="{{ $installer->Status }}" required>
</div>
</div>
<div class="field">
<label class="label" for="EmpId">Employee ID</label>
<div class="control">
<input type="text" class="input" name="EmpId" placeholder="Employee ID" value="{{ $installer->EmpId }}" required>
</div>
</div>
<div class="field">
<div class="control">
<button type="submit" class="button is-link">Update Installer</button>
</div>
</div>
</form>
我如何修改它以便 eloquent 将继续自动更新 updated_at 字段?
您没有在更新方法中包含数组
必须是这样的:
$installer->update([
'FirstName' => $request->FirstName,
'LastName' => $lastNameVar,
'ColName' => $colValue,
...
]);
其中 $request 是来自
的数据
所以我只是犯了一个语法错误,但我想如果有人有类似的问题我会把它留下来。在我的更新方法中:
$installer->update(['FirstName', 'LastName', 'Position', 'Status', 'EmpId']);
应改为:
$installer->update(request(['FirstName', 'LastName', 'Position', 'Status', 'EmpId']));
你的更新方式有误
一个简单的方法是尝试如下操作:
public function update(Installer $installer) {
$validatedData = request()->validate([
'FirstName' => 'required',
'LastName' => 'required',
'Position' => 'required',
'Status' => 'required',
'EmpId' => 'required'
]);
$installer->update($validatedData); //or $installer->update([$validatedData]);
return redirect('/installers');
}
希望对您有所帮助
我正在 Laravel 中创建一个 CRUD 应用程序,我正在使用默认的 created_at 和 updated_at 列,它们似乎在我插入或更新数据库时自动填充.当从使用已编辑条目的 ID 更改为在我的更新方法中将实际模型条目作为参数拉入时,我偶然发现了异常“InvalidArgumentException 调用 $installer->update(['my field 1', ...]);
时找不到四位数年份数据丢失”我已经尝试添加我的请求和拉入的 $installer 对象,一切看起来都是正确的,但是以这种方式更新似乎会破坏 updated_at 字段上的更新。以下是相关片段:
我的模型class:
class Installer extends Model
{
protected $guarded = [];
}
我的更新方式:
public function update(Installer $installer) {
request()->validate([
'FirstName' => 'required',
'LastName' => 'required',
'Position' => 'required',
'Status' => 'required',
'EmpId' => 'required'
]);
$installer->update(['FirstName', 'LastName', 'Position', 'Status', 'EmpId']);
return redirect('/installers');
}
我编辑表单的相关部分:
<form method="POST" action="/installers/{{ $installer->id }}" style="margin-bottom: 1em">
@method('PATCH')
@csrf
<div class="field">
<label class="label" for="FirstName">First Name</label>
<div class="control">
<input type="text" class="input" name="FirstName" placeholder="First Name" value="{{ $installer->FirstName }}" required>
</div>
</div>
<div class="field">
<label class="label" for="LastName">Last Name</label>
<div class="control">
<input type="text" class="input" name="LastName" placeholder="Last Name" value="{{ $installer->LastName }}" required>
</div>
</div>
<div class="field">
<label class="label" for=Position">Position</label>
<div class="control">
<input type="text" class="input" name="Position" placeholder="Position" value="{{ $installer->Position }}" required>
</div>
</div>
<div class="field">
<label class="label" for="Status">Status</label>
<div class="control">
<input type="text" class="input" name="Status" placeholder="Status" value="{{ $installer->Status }}" required>
</div>
</div>
<div class="field">
<label class="label" for="EmpId">Employee ID</label>
<div class="control">
<input type="text" class="input" name="EmpId" placeholder="Employee ID" value="{{ $installer->EmpId }}" required>
</div>
</div>
<div class="field">
<div class="control">
<button type="submit" class="button is-link">Update Installer</button>
</div>
</div>
</form>
我如何修改它以便 eloquent 将继续自动更新 updated_at 字段?
您没有在更新方法中包含数组
必须是这样的:
$installer->update([
'FirstName' => $request->FirstName,
'LastName' => $lastNameVar,
'ColName' => $colValue,
...
]);
其中 $request 是来自
的数据所以我只是犯了一个语法错误,但我想如果有人有类似的问题我会把它留下来。在我的更新方法中:
$installer->update(['FirstName', 'LastName', 'Position', 'Status', 'EmpId']);
应改为:
$installer->update(request(['FirstName', 'LastName', 'Position', 'Status', 'EmpId']));
你的更新方式有误
一个简单的方法是尝试如下操作:
public function update(Installer $installer) {
$validatedData = request()->validate([
'FirstName' => 'required',
'LastName' => 'required',
'Position' => 'required',
'Status' => 'required',
'EmpId' => 'required'
]);
$installer->update($validatedData); //or $installer->update([$validatedData]);
return redirect('/installers');
}
希望对您有所帮助