在Laravel中我有一个控制器从ajax接收请求,并在数据库表中插入数据,以下代码运行良好
-Laravel controller function
public function updateFormcoords(Request $data, Form $form)
{
if ($data->ajax()){
$formcoord=new Formcoord;
$formcoord->field_name=$data->input('field_name');
$formcoord->x=$data->input('x');
$formcoord->y=$data->input('y');
$formcoord->w=$data->input('w');
$formcoord->h=$data->input('h');
$formcoord->r=$data->input('r');
$formcoord->shape=$data->input('shape');
$formcoord->fill=$data->input('fill');
$formcoord->q_id=$data->input('q_id');
$formcoord->q_option=$data->input('q_option');*/
$form->formcoords()->save($formcoord);
}
}
- ajax请求如下:
$.ajax({
async: false,
url: {{ route(updateFormcoords) }},
headers: {"X-CSRF-TOKEN": token},
type: 'POST',
dataType: 'json',
data: {field_name:boxes[i].field_name, x: x, y: y, w: w, h: h, r: r, shape: boxes[i].shape, fill: boxes[i].fill.substring(1), multiMark: boxes[i].multiMark, q_id: boxes[i].q_id, q_option: boxes[i].q_option, _token: token}
});
- 最后溃败是以下
Route::post('/createform/{form}/update', ['as' => 'updateFormcoords', 'uses' =>'FormController@updateFormcoords']);
所有这一切都工作得很好,但我真正想要的是用$ request-> all()创建所有字段,所以我不需要按字段写字段DB,换句话说,这就是我想要做的事情:
public function updateFormcoords(Request $data, Form $form)
{
if ($data->ajax()){
$formcoord=new Formcoord;
$formcoord->create($data->all());
$form->formcoords()->save($formcoord);
}
}
然后出现以下错误
" SQLSTATE [HY000]:常规错误:1364字段' form_id'没有 默认值(SQL:插入
formcoords
(field_name
,x
,y
,w
,h
,r
,shape
,fill
,q_id
,q_option
,updated_at
,created_at
)值(asdf,0.08479087452471483,0.018527667984189724, 0.09125475285171103,0.06027667984189724,0,10,91e57b,0,0,2017-02-23 16:13:00,2017-02-23 16:13:00))"
我不明白,因为我认为Laravel eloquent应该在父DB表变量中保存行时自动填充form_id字段(在代码行“$ form-> formcoords() - >保存(formcoord $)”。 我非常感谢任何帮助
最好的问候。
答案 0 :(得分:2)
不要创建,创建将尝试创建行,但尚未将其与任何表单相关联。
执行:
$formcoord=new Formcoord($data->all());
$form->formcoords()->save($formcoord);