2017-03-20 13 views
0

私は8つの異なるフォームがすべて私のデータベースの同じ「ユーザー」テーブルを更新する予定のプロジェクトを持っています。私は、ユーザー認証が動作していると私のlocalhostのmysqlデータベース上のテーブル内のユーザーになります。しかし、私がテーブルを更新し始めると、電子メールが一意でないか、HTTPエラーやRouteDependencyResolverTrait.Rif ReflectionExceptionのエラーではありません。内部エラー:デフォルト値の取得に失敗しました。 私はすべてを試しましたが、私の作成は動作しますが、新しい行を作成し、ユーザーがサインインしている既存の行を更新しません。私のフォームがデータベースの値を更新しない理由を理解できません

私はLaravel 5.4を初めて習得し、すべてのLaracastを終えてしまったので、私は何をすべきかについてまったく困惑しています。

誰でも考えを持っているか、それを修正する方法や改善する方法を知っていますか?私が何かを見逃してしまった場合は教えてください。私は2日間この作業をしようとしています。

Basics.php

<?php 
namespace App; 
class Basics extends Model 
{ 
    public $table = "users"; 

    protected $fillable = [ 
     'family_name', 
     'given_names' 
    ]; 
} 

BasicsController.php

class BasicsController extends Controller 
{ 
    public function index() 
    { 
     $user = \Auth::user(); 
     return view('/details/basics', compact('user')); 
    } 
    public function update(Request $request, $id) 
    { 
     $basics = Basics::find($id); 
     $basics->family_name = $request->input('family_name'); 
     $basics->given_names = $request->input('given_names'); 

     $basics->save(); 

     return redirect("/details/basics"); 
    } 
} 

basics.blade.php

@extends ('layouts/app') 

@section ('content') 
    {{--Do @includes for all form components with the components file--}} 

    @include ('layouts/header') 

    <main class="main"> 
     <form action="/details/basics" method="POST"> 
      <input type="hidden" name="_method" value="PATCH"> 
      <input type="hidden" name="_token" value="{{ csrf_token() }}"> 

      <fieldset> 
       <label>Family name</label> 
       <input type="text" name="family_name" placeholder="Family name" value="{{ old('family_name') }}" /> 
      </fieldset> 

      <fieldset> 
       <label>Given names</label> 
       <input type="text" name="given_names" placeholder="Given names" value="{{ old('given_names') }}" /> 
      </fieldset> 

      <button type="submit" value="Save" name="save" class="button button-primary button-wide">Save</button> 
     </form> 
    </main> 
@endsection 

web.php

Route::get('/', function() { 
    return view('welcome'); 
}); 

// Authentication Routes 
Auth::routes(); 
Route::get('/logout', 'Auth\[email protected]'); 

Route::get('/home', '[email protected]'); 

Route::get('/dashboard', function() { 
    $user = Auth::user(); 

    return view('dashboard', compact('user')); 
}); 

// Eligibility Assessments 
Route::get('/assessment/student', '[email protected]'); 
Route::post('/assessment/results', '[email protected]'); 

// Details 
Route::get('/details/basics', '[email protected]'); 
Route::patch('/details/basics', '[email protected]'); 
+0

/laravelの 'make:auth'を使用していますか?あなたは 'email'フィールドをテーブルに持っていますか? –

+0

はい私はmake:authを使用しており、テーブルに電子メールの列があります – aszet

答えて

0

ポストリクエストにルールを追加する必要があります。このルールは、モデルの更新時に電子メールフィールドを除外します。これは、電子メールが一意のエラーではないという理由です。あなたは電子メールフィールドを投稿していませんが、それでも保存メソッドはそれをやっています。 patchの代わりにpostを使ってみてください。 Route.phpのデバッグ目的のために、

+0

私はそれを試してもうまくいきませんでした:(私は間違っているかもしれません。 ) {基本::パッチ(要求( [ 'FAMILY_NAME' 'given_names' ] )); リターンリダイレクト( "/詳細/基礎");} ' basics.blade .php '

' – aszet

+0

フォームにアクション属性を空のままにしました。これに加えて、データベース関連のタスクを実行せずにコントローラにフォームを投稿しようとします。フォームが正しく機能しているかどうかを確認するだけです。 – codvlpr

+0

私はそれをlaravelのドキュメントで示したように空にしました。 'BadMethodCallException in Builder.php 2508行:未定義メソッドを呼び出す\ Database \ Query \ Builder :: patch()' – aszet

関連する問題