我的Laravel应用中有business
和profile
个模型。商家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中内置的批量分配规则。有人可以建议如何解决这个问题吗?
答案 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);
我确信这是一个更聪明的方法,但现在这样做:-)