2

我的 Laravel 应用程序中有businessprofile模型。业务hasOne简介。我使用表单生成器创建了一个补丁方法表单来更新我的业务和配置文件表。

{!! Form::model($business, ['route' => ['business.edit.post', $business], 'method' => 'PATCH']) !!}
                @include('forms.business.edit')
{!! Form::close() !!}

业务控制器

public function update(Request $request, $id)
{
    $business = Business::findOrFail($id);

    $business->update($request->all());
    $business->profile()->update($request->all());        

    return back()->withMessage('updated');
}

现在使用补丁方法将包括一个名为 _method 的隐藏字段以及用于 csrf 保护的内置 _token 字段。更新模型时出现错误,profile说明:

SQLSTATE[42S22]: Column not found: 1054 Unknown column '_method' in 'field list' (SQL: update `business_profiles` set `_method` = PATCH, `_token` = Zyxtxa88uUQKhaRQNY8k7qPu2N0i6o20dY4sUABk, `city` = Belfast where `business_profiles`.`business_id` = 107 and `business_profiles`.`business_id` is not null)

在我看来,它试图更新那些不应该的隐藏字段。注释掉 _profile->update行时,保存工作正常。看起来更新相关模型不符合 Laravel 内置的批量分配规则。有人可以建议如何解决这个问题吗?

4

2 回答 2

3

您可以添加$fillable到您的模型或使用$request->only([]).

编辑

看起来问题是您正在通过关系进行更新。正如您所想和评论所建议的那样,简单的解决方法是更改$business->profile()->update($request->all());​​为$business->profile->update($request->all());.

于 2017-04-26T00:38:39.920 回答
0

我想$fillable在我的模型上使用,而不必手动说明要填充哪些列。

我改变了我的更新方法如下:

$business = Business::findOrFail($id);
$profile = $business->profile;

$business->update($request->all);
$profile->update($request->all);

我敢肯定有一种更聪明的方法可以做到这一点,但现在就可以了:-)

于 2017-04-26T01:16:28.813 回答