尝试更新数据库条目会引发“找不到四位数年份数据丢失”异常

时间:2019-04-03 18:26:55

标签: php laravel eloquent php-carbon

我正在通过在Laravel中创建CRUD应用程序工作,我使用的是默认的created_at和Updated_at列,这些列在我插入或更新到数据库时似乎会自动填充。从使用已编辑条目的ID更改为在更新方法中将实际模型条目作为参数引入时,我偶然发现了“ InvalidArgumentException”异常 调用$$ installer-> update(['my field 1',...]);

时,找不到四位数年份数据丢失”

我尝试添加请求和插入的$ installer对象,一切看起来正确,但是以这种方式进行更新似乎破坏了updated_at字段的更新。以下是相关的摘要:

我的模型班:

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>

我该如何修改,以便雄辩地继续自动更新updated_at字段?

3 个答案:

答案 0 :(得分:1)

您的更新方法错误

一种简单的方法是尝试以下操作:

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');
}

希望这会有所帮助

答案 1 :(得分:0)

您没有在更新方法中包含数组

必须是这样的:

$installer->update([
    'FirstName' => $request->FirstName,
    'LastName' => $lastNameVar,
    'ColName' => $colValue,
   ...
]);

$ request是来自

的数据

答案 2 :(得分:0)

所以我只是犯了一个语法错误,但我认为如果有人遇到类似问题,我会放弃。在我的更新方法中:

        $installer->update(['FirstName', 'LastName', 'Position', 'Status', 'EmpId']);

应为:

        $installer->update(request(['FirstName', 'LastName', 'Position', 'Status', 'EmpId']));