SQLSTATE[HY000]: General error: 1364 Field 'practice_name' doesn't have a default value

SQLSTATE[HY000]: General error: 1364 Field 'practice_name' doesn't have a default value

我是 Laravel 的初学者(这个项目是 5.4 版),但不明白为什么这不起作用。这是我的代码设置:

HTML 表格(表格方法="post"。动作为“/providers”):

<div class="form-group">

<label for="practice_name">Name:</label>
<input type="text" class="form-control" name="practice_name" id="practice_name">
</div>
<button type="submit" class="btn btn-primary">Submit</button>

供应商型号:

protected $fillable = ['provider_name'];

供应商控制器:

    public function store(Request $request)
{
    Provider::create([
        'practice_name' => request('practice_name')
    ]);
    return redirect()->route('AllProviders');
}

我已经完成了转储和死亡:

dd($request->all());

这就是我得到的:

array:2 [
_token" => "wcCHLBR9hJhH8JS7vSc3vUjyLnjvg0Wvn8oRUnAh"
"practice_name" => "Test Provider"
]

我的网络路由是这样的:

Route::get('/pricing', 'ProtectedPagesController@pricing');

Route::get('/providers', 'ProvidersController@index')->name('AllProviders');
Route::get('/providers/create', 'ProvidersController@create')->name('CreateProvider');
Route::post('/providers', 'ProvidersController@store')->name('StoreProvider');
Route::get('/providers/{provider}', 'ProvidersController@show');

Route::get('/patients', 'PatientsController@index')->name('AllPatients');
Route::get('/patients/{patient}', 'PatientsController@show');

因此,我的 Dump and Die 显示我的控制器正在获取 provider_name 变量,但是当我执行 Create 命令时,它告诉我它没有看到该值。我确信这很简单,但是在花了最后一天半的时间查看 Whosebug(以及网络的其余部分)之后,我不断得到我已经尝试过的修复。我得到的错误是:

SQLSTATE[HY000]: General error: 1364 Field 'practice_name' doesn't have a default value (SQL: insert into providers (updated_at, created_at) values (2018-04-09 13:45:45, 2018-04-09 13:45:45))

而且我不想让该字段在数据库中可以为空,因为该字段是必填字段。如果我使数据库可以为空,那么这个控制器就没有意义了——而且,我看不出这是如何解决这个问题的。表单值仍未读入 Create 函数。

希望有人能在这里帮助我。谢谢!

request('practice_name') 似乎没有 return 字段值。试试这个:

public function store(Request $request)
{
    $requestValues = $request->all();
    Provider::create([
        'practice_name' => $requestValues['practice_name']
    ]);
    return redirect()->route('AllProviders');
}

public function store(Request $request)
{
    Provider::create([
        'practice_name' => $request->input('practice_name')
    ]);
    return redirect()->route('AllProviders');
}

您可以在以下 link 中阅读有关 "how to read request values" 的更多信息: https://laravel.com/docs/5.4/requests