使用Laravel更新数据库

时间:2015-01-31 18:14:13

标签: php laravel frameworks

我正在尝试使用Laravel更新数据库中的信息。不知道我做错了什么,但我似乎无法找到问题所在。这是我的编辑页面的代码(这是我将编辑从我的数据库中获取的信息的页面)。

{{ Form::open(['url'=>'portfolio/update']) }}
    <div>
        {{ Form::label('portfolio_title', 'Portfolio Title:') }}
        {{ Form::text('portfolio_title',$work->portfolio_title) }}
        {{ $errors->first('portfolio_title','<span class="error">:message</span>') }}
    </div>
    <div>
        {{ Form::label('portfolio_description', 'Portfolio Description') }}<br>
        {{ Form::textarea('portfolio_description', $work->portfolio_description, ['size' => '50x5']) }}
        {{ $errors->first('portfolio_description','<span class="error">:message</span>') }}
    </div>
    <div>
        {{ Form::label('portfolio_content', 'Portfolio Content') }}<br>
        {{ Form::textarea('portfolio_content', $work->portfolio_content, ['size' => '50x5']) }}
        {{ $errors->first('portfolio_content','<span class="error">:message</span>') }}
    </div>
    {{ Form::hidden('id',$work->id) }}
    <div>
        {{ Form::submit('Update Work') }}
    </div>
{{ Form::close() }}

我有一个名为PortfolioController的控制器,它将信息保存到数据库中,而不是。

public function edit($work_title){
    $work = Portfolio::wherePortfolio_title($work_title)->first();
    return View::make('portfolio/edit', ['work' => $work]);
}

public function update(){
    $id = Input::get('id');
    $input = Input::except('id');

    if( !$this->portfolio->fill($input)->isValid()){
        return Redirect::back()->withInput()->withErrors($this->portfolio->errors);
    }

    $work = Portfolio::find($id);

    $work->portfolio_title = Input::get('id');

    $work->save();

}

以下是我与之合作的路线:

Route::resource('portfolio','PortfolioController');
Route::post('portfolio/update','PortfolioController@update');

我可以使用正确的信息填充表单,但是当我更改标题和单击更新等内容时,页面会重新加载但不会保存在数据库中。有时我会收到MethodNotAllowedHttpException错误。这对我来说非常令人沮丧,所以任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

为什么不直接使用资源路径?

首先,删除portfolio/update路线。你不需要它。

然后将Form::open更改为此:

{{ Form::open(['route' => ['portfolio.update', $work->portfolio_title], 'method' => 'put']) }}

这样您就可以在RESTful控制器中定位更新方法。

最后更改为使用portfolio_title作为标识符,您应该可以从表单中删除隐藏的id字段。

public function update($work_title){}

请看一下: