使用 Laravel 更新数据库
Update Database with Laravel
我正在尝试使用 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
错误。这让我非常沮丧,所以我们将不胜感激任何帮助。
你为什么不直接使用你的资源路由?
首先,删除 portfolio/update
路由。你不需要它。
然后将您的 Form::open
更改为:
{{ Form::open(['route' => ['portfolio.update', $work->portfolio_title], 'method' => 'put']) }}
这样您就可以在 RESTful 控制器中定位更新方法。
最后将其更改为使用 portfolio_title
作为标识符,您应该能够从表单中删除隐藏的 id
字段。
public function update($work_title){}
请看:
我正在尝试使用 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
错误。这让我非常沮丧,所以我们将不胜感激任何帮助。
你为什么不直接使用你的资源路由?
首先,删除 portfolio/update
路由。你不需要它。
然后将您的 Form::open
更改为:
{{ Form::open(['route' => ['portfolio.update', $work->portfolio_title], 'method' => 'put']) }}
这样您就可以在 RESTful 控制器中定位更新方法。
最后将其更改为使用 portfolio_title
作为标识符,您应该能够从表单中删除隐藏的 id
字段。
public function update($work_title){}
请看: