我是Laravel的初学者(这个项目是版本5.4),但是无法理解为什么这不起作用。这是我的代码设置:
HTML表单(表单方法=“发布”。操作是“/ 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'];
ProvidersController:
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和Die显示我的控制器正在获取provider_name变量,但是当我执行Create命令时,它告诉我它没有看到值。我确信这很简单,但是在花了最后一天半看着StackOverflow(以及网络的其余部分)之后,我一直在修复我已经尝试过的问题。我得到的错误是:
SQLSTATE [HY000]:常规错误:1364字段'practice_name'没有默认值(SQL:插入
providers
(updated_at
,created_at
)值(2018- 04-09 13:45:45,2018-04-09 13:45:45))
我不想让该字段在数据库中可以为空,因为该字段是必需的。如果我让数据库可以为空,那么这个控制器是没有意义的 - 而且,我不知道如何解决这个问题。表单值仍未被读入Create函数。
希望有人能在这里帮助我。谢谢!
答案 0 :(得分:0)
request('practice_name')
似乎没有返回字段值。试试这个:
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');
}
您可以在以下链接中阅读有关“如何读取请求值”的更多信息: https://laravel.com/docs/5.4/requests