2016-09-22 104 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'; 
     } 
    }   

我認爲這是對你有幫助..