Laravel不遵守Mass Assignment $可填写相关模型更新的规则

时间:2017-04-26 00:36:20

标签: php laravel laravelcollective

我的Laravel应用中有businessprofile个模型。商家hasOne个人资料。 我使用表单构建器创建了一个补丁方法表单来更新我的业务和配置文件表。

刀片

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

BusinessController

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中内置的批量分配规则。有人可以建议如何解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

您可以将$fillable添加到模型中,也可以使用$request->only([])

修改

看起来问题是你正在通过这种关系进行更新。正如您所知及的那样,简单的解决方法是将$business->profile()->update($request->all());更改为$business->profile->update($request->all());

答案 1 :(得分:0)

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

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

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

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

我确信这是一个更聪明的方法,但现在这样做:-)