无法弄清楚为什么我的表单没有更新数据库中的值

时间:2017-03-20 08:05:59

标签: php mysql laravel laravel-5.4

我有一个项目将有8种不同的形式,所有形式都更新相同的用户'我的数据库中的表。我有用户身份验证工作,它使我的localhost mysql数据库中的表中的用户。但是,当我开始更新表时,我不断收到错误,例如电子邮件不是唯一的,或者在RouteDependencyResolverTrait.php第57行中出现http错误或ReflectionException:内部错误:无法检索默认值。 我已经尝试了所有内容,我的创建工作但它创建了一个新行,并且不会更新用户登录的现有行。

我只是Laravel 5.4的新手并且已经完成了所有的Laracasts,所以我绝对不知所措。

有没有人有任何想法或知道如何解决或更好地重组?如果我错过了什么,请告诉我。我一直试图让它工作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\LogoutController@destroy');

Route::get('/home', 'DashboardController@index');

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

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

// Eligibility Assessments
Route::get('/assessment/student', 'AssessmentController@index');
Route::post('/assessment/results', 'AssessmentController@store');

// Details
Route::get('/details/basics', 'BasicsController@index');
Route::patch('/details/basics', 'BasicsController@update');

1 个答案:

答案 0 :(得分:0)

您需要在帖子请求中添加一条规则,该规则会在更新模型时排除电子邮件字段。这就是为什么你收到电子邮件不是唯一的错误。虽然您没有发布电子邮件字段,但仍然保存方法正在执行此操作。尝试使用post而不是patch。仅用于Route.php中的调试目的