【问题标题】:Update Database with Laravel使用 Laravel 更新数据库
【发布时间】:2015-01-31 18:14:12
【问题描述】:

我正在尝试使用 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 错误。这对我来说非常令人沮丧,因此我们将不胜感激。

【问题讨论】:

  • 尝试添加对 dd 函数的调用以检查更新方法是否真的被调用。例如:dd('PortfolioController@update');

标签: php laravel frameworks


【解决方案1】:

你为什么不直接使用你的资源路由?

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

然后将您的 Form::open 更改为:

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

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

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

public function update($work_title){}

请看:

【讨论】:

  • 我正在使用我的资源路由,但我不断收到MethodNotAllowedHttpException 错误。我以为是因为我使用了错误的方法,这就是我有Route::post()的原因;我做了你建议的更改,我没有收到任何错误,但数据库没有更新,只是用我所做的更改重新加载页面。
  • 我认为这是因为您实际上并没有使用输入更新模型。尝试手动分配它,逐个属性或使用$work-&gt;fill($input) 分配所有值。但是,您需要在 $fillables 数组中指定属性。关于mass assignment的更多信息
  • 我已经设置了我的 $fillables 数组,其中包含可以批量分配的内容。我在我的模型中创建了一个名为 updateRecord($id,$wTitle,$wDescription,$wContent) 的方法,然后我使用静态 find 方法使用其 ID $work = Portfolio::find($id); 查找记录。然后我逐个属性地分配值$work-&gt;portfolio_title = $wTitle; 然后将其保存$work-&gt;save(); 没有保存在数据库中只是重新加载页面。
  • 如果将dd('test') 放入更新方法中会发生什么?
  • 你能把验证部分注释掉吗?只是为了确定不是这样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-16
  • 2021-06-03
  • 2019-07-07
  • 2019-05-31
  • 2017-08-06
  • 2020-03-30
相关资源
最近更新 更多