我有一个资源,我正在尝试设置更新控制器。在我的情况下,我的编辑表单有很多输入,我需要用它们更新数据库,但数据库中的列可能没有被编辑表单更改。所以我有这样的控制器:
public function update($id)
{
$hostess = Hostess::find($id);
$inputs=Input::all();
foreach ($inputs as $key => $value) {
$hostess->$key= $value;
}
if ($hostess->save())
{
return Redirect::route('hostesses.show', $hostess->id);
}
return Redirect::back()->withInput()->withErrors($hostess->getErrors());
}
这给了我一个错误,因为我在我的视图中使用了PUT而且我得到了
Column not found: 1054 Unknown column '_method' in 'field list'
因为我的Input :: all()获取了PUT方法的隐藏输入。我可以使用Input :: except(),但这是用laravel更新的正确方法吗?
答案 0 :(得分:4)
你实际上可以这样做:
$hostess = Hostess::find($id)
$post_data = Input::all();
// or
$post_data = Input::except('_method');
// warning untested if block below
if ($hostess->update($post_data))
{
return Redirect::route('hostesses.show', $hostess->id);
}
return Redirect::back()->withInput()->withErrors($hostess->getErrors());
只要更新所有可用的键和值对。
请注意,您必须将columns
添加到模型中的$fillable
属性,以避免批量分配警告。
答案 1 :(得分:0)
你可以这样做:
$inputs = Input::all();
$inputs = array_except($input, '_method');