代码之家  ›  专栏  ›  技术社区  ›  RobDeFlop

Laravel更新函数引发异常

  •  0
  • RobDeFlop  · 技术社区  · 8 年前

    我目前正在与laravel合作,希望使用控制器更新“模型”

    public function update(Request $request, $id)
    {
        $request->validate([
            'criminal' => 'required|string',
            'crimes' => 'required|string',
            'happened_at' => 'required',
            'description' => 'required|string',
            'report' => 'string|nullable',
            'happened_at' => 'required',
            'testifies' => 'string|nullable',
            'officers' => 'string|nullable',
        ]);
    
        $case               = Cases::find($id);
        $case->criminal     = $request->input('criminal');
        $case->crimes       = $request->input('crimes');
        $case->officers     = $request->input('officers');
        $case->testifies    = $request->input('testifies');
        $case->report       = $request->input('report');
        $case->happened_at  = $request->input('happened_at');
        $case->crime_desc   = $request->input('description');
    
        $case->save();
        return redirect('cases.index');
    }
    

    它不保存数据并引发异常: Unexpected data found. Unexpected data found. Data missing

    有人知道它为什么抛出异常吗? 提前谢谢你

    2 回复  |  直到 8 年前
        1
  •  0
  •   Indra    8 年前

    您的问题在请求中。您的字段具有此格式Y-m-d,而在碳设定器中,您的行为就好像此格式是('Y-m-d H:i:s')

    我不太确定代码是否经过了那个变异器(从未将其与save一起使用过)

    This code should work:
    
    $case               = Cases::find($id);
    $case->criminal     = $request->input('criminal');
    $case->crimes       = $request->input('crimes');
    $case->officers     = $request->input('officers');
    $case->testifies    = $request->input('testifies');
    $case->report       = $request->input('report');
    $case->happened_at  = Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $request->happened_at. ' 00:00:01');
    $case->crime_desc   = $request->input('description');
    

    在这种情况下,我建议您将实际发生时间作为日期,而不是时间戳

    如果您在模型中使用fillable,那么这段代码也应该可以工作

    $request['happened_at'] = Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $request->happened_at. ' 00:00:01');
    
    Cases::find($id)->update($request->all());
    

    如果您担心时区问题,请以UTC保存所有内容,然后利用unix时间戳

    Carbon\Carbon::createFromFormatUTC('Y-m-d H:i:s', $request->happened_at. ' 00:00:01');
    
        2
  •  0
  •   Michał Graczyk    8 年前

    $案例->发生时间=$请求->输入('occurrent\u at');数据库中可能有日期字段-表单中的数据格式是否正确?

    为此设置mutator:

    public function setHappenedAtAttribute($value)
    {
        $this->attributes['happened_at'] = Carbon\Carbon::createFromFormat('d-m-Y h:i', $value);
    }
    

    或无碳:

    public function setHappenedAtAttribute($value)
    {
        $this->attributes['happened_at'] = date("d-m-Y H:i:s", strtotime($value));
    }
    

    最终在模型顶部:

    protected $dates = [
        'created_at',
        'updated_at',
        'deleted_at',
        'happened_at'
    ];
    
    推荐文章