2016-09-22 103 views
0

我需要帮助更新我在laravel中创建的博客文章。 我正在使用宁静控制器中的更新方法来处理此问题。 在我看来,表单正在提交给控制器内的正确功能(更新方法),但数据库中的表没有反映出这种变化。更新Laravel中的表单

以下是我有以下形式:

@extends('layouts.app') 

@section('content') 
<div class="container"> 
<div class="row"> 
    <div class="col-md-8 col-md-offset-2"> 
     <div class="panel panel-default"> 
      <div class="panel-heading">Register</div> 
      <div class="panel-body"> 
       <form class="form-horizontal" role="form" method="POST" action="{{ url('/posts/$post_id') }}"> 
        {{ csrf_field() }} 
        <input type="hidden" name="_method" value="PUT"> 
        <div class="form-group{{ $errors->has('title') ? ' has-error' : '' }}"> 
         <label for="title" class="col-md-4 control-label">Title</label> 

         <div class="col-md-6"> 
          <input id="title" type="text" class="form-control" name="title" value="{{ !empty(old('title')) ? old('title') : $post->title }}" required autofocus> 

          @if ($errors->has('title')) 
           <span class="help-block"> 
            <strong>{{ $errors->first('title') }}</strong> 
           </span> 
          @endif 
         </div> 
        </div> 
        <div class="form-group{{ $errors->has('content') ? ' has-error' : '' }}"> 
         <label for="content" class="col-md-4 control-label">Content</label> 

         <div class="col-md-6"> 
          <textarea id="content" type="text" class="form-control" name="content" required rows="15" cols="20">{{ !empty(old('content')) ? old('content') : $post->content }}</textarea> 

          @if ($errors->has('content')) 
           <span class="help-block"> 
            <strong>{{ $errors->first('content') }}</strong> 
           </span> 
          @endif 
         </div> 
        </div> 

        <div class="form-group"> 
         <div class="col-md-6 col-md-offset-4"> 
          <button type="submit" class="btn btn-primary"> 
           Post 
          </button> 
         </div> 
        </div> 
       </form> 
      </div> 
     </div> 
    </div> 
</div> 
</div> 
@endsection 

这里是控制器功能

public function update(PostRequest $request, $id) 
{ 
    $title = $request->title; 
    $content = $request->content; 

    DB::table('posts')->where('id', $id)->update(['title' => $title, 'content' => $content]); 

    return 'Post was updated.<br>' . $title . '<br>' . $content; 
} 

我增加了$标题和$内容变量return语句只是为了看看他们正在经历良好并被正确捕获。当我提交表格时,我会收到返回语句,因为它是写在这里的。这至少告诉我这个表单正确地提交给了这个函数,但正如我所说的那样,数据库并没有反映这个变化。有人知道我在这里做错了吗?不知道是否其更新命令对于使用隐藏的inout字段的PUT方法的存根无法正确工作。

在此先感谢。

+1

不相关的问题,但我会强烈建议使用**雄辩模型**。然后你的更新查询就像'$ post-> update();' – linuxartisan

+0

一样简单。你为什么不调试你的SQL查询,尽管它看起来更新查询? – Kamal

回答

0

更新方法返回布尔本身,以便检查其是否为真,则意味着该查询是成功

public function update(PostRequest $request, $id) 
    { 
     $title = $request->title; 
     $content = $request->content; 

     if (DB::table('posts')->where('id', $id)->update(['title' => $title, 'content' => $content])) { 
      return 'Post was updated.<br>' . $title . '<br>' . $content; 
     } else { 
      return 'Failed to update Post'; 
     } 
    } 
+0

所以这些解决方案都没有工作。在试图调试原因时,我注意到,因为我使用$ post-title和$ post->内容来填充表单,所以当我将表单提交到更新函数时,旧值与以前相同。所以更新函数没有得到新的值。这可能是问题,但我不太清楚如何解决这个问题?任何解决方案 – Kaley36

+0

@ Kaley36还没有解决呢? – Beginner

0

试试这个下面,只有您要验证在PostRequest输入文件

 public function update(PostRequest $request, $id) 
    { 
     $title = $request->input('title'); 
     $content = $request->input('content'); 

     if (DB::table('posts')->where('id', $id)->update(['title' => $title, 'content' => $content])) { 
     return 'Post was updated.<br>' . $title . '<br>' . $content; 
     } else { 
     return 'Failed to update Post'; 
     } 
    }   

,或者如果您使用Post模型,然后用它

 public function update(PostRequest $request, $id) 
    { 
     $title = $request->input('title'); 
     $content = $request->input('content'); 

     if (POST::find($id)->update([$title, $content]) { 
     return 'Post was updated.<br>' . $title . '<br>' . $content; 
     } else { 
     return 'Failed to update Post'; 
     } 
    }   

,或者如果您使用的是宝ST模型,然后用它

 public function update(PostRequest $request, $id) 
    { 

     if (POST::find($id)->update($request->all()) { 
     return 'Post was updated.<br>' . $title . '<br>' . $content; 
     } else { 
     return 'Failed to update Post'; 
     } 
    }   

我认为这是对你有帮助..