Laravel更新控制器,具有许多输入

时间:2014-04-23 10:45:50

标签: php laravel laravel-4

我有一个资源,我正在尝试设置更新控制器。在我的情况下,我的编辑表单有很多输入,我需要用它们更新数据库,但数据库中的列可能没有被编辑表单更改。所以我有这样的控制器:

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更新的正确方法吗?

2 个答案:

答案 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');