当我尝试使用 laravel 发布表单时,控制台显示“不正确的整数值”。无法识别路由参数
Posted
技术标签:
【中文标题】当我尝试使用 laravel 发布表单时,控制台显示“不正确的整数值”。无法识别路由参数【英文标题】:Console shows 'Incorrect integer value' when I try to post form with laravel. Route parameter is not recognized 【发布时间】:2020-01-09 14:30:11 【问题描述】:我正在尝试向用户提交的数据库发布答案。不同主题的问题是相同的,所以我有一个外键到 subject_id 和 user_id。但我总是收到 500 错误。
这些是我的路线:
Route::get('/predmeti/subject/analiza', 'AnalizaController@show');
Route::post('predmeti/subject/analiza_answers', 'AnalizaAnswerController@store');
获取显示视图的AnalizaController:
public function show(Request $request, $subject_id)
$analizaquestions=AnalizaQuestion::all();
return view('analiza.show', compact('analizaquestions'));
AnalizaAnswerController 用于 post 方法:
public function store(Request $request, $subject_id)
$validated = $request->validate([
'answer'=>'required',
'analiza_question_id'=>'required',
]);
$validated['user_id']=Auth::id();
$validated['subject_id']=$subject_id;
AnalizaAnswer::create($validated);
return redirect('/predmeti/'.$subject_id);
最后是用来发布的js文件:
window.addEventListener('load', function ()
function submitAnswers()
$(this).hide();
$('#loader').show();
$('.answer_form').each(function ()
var answer=;
answer['analiza_question_id'] = $(this).find('input[name="analiza_question_id"]').val();
answer['answer'] = $(this).find('input[name="answer"]:checked').val();
console.log(answer);
$.ajax(
type: "POST",
url: "/predmeti/subject/analiza_answers",
data: answer,
success: function(data)
window.location.href = "/predmeti/subject/analiza";
,
);
);
$('#btn_submit_answers').click(submitAnswers);
);
每次我尝试发布时,我都会得到“SQLSTATE[22007]:无效的日期时间格式:1366 不正确的整数值:第 1 行的列“subject_id”的“subject”(SQL:插入到analiza_answers
(@987654326 @, analiza_question_id
, user_id
, subject_id
, updated_at
, created_at
) 值 (Ne, 1, 56, subject, 2019-09-06 16:41:40, 2019-09-06 16:41:40))' 和 '%7Bsubject%7D' 在我的路线中。我不知道如何从我的路线中获取 id,以便我可以发布到数据库。
【问题讨论】:
【参考方案1】:您实际上是在您的ajax
请求中通过/predmeti/subject/analiza_answers
将subject
发布为$subject_id
,但您需要将subject
替换为$subject_id
。
首先,确保您将$subject_id
传递给您的视图:
public function show(Request $request, $subject_id)
$analizaquestions=AnalizaQuestion::all();
return view('analiza.show', compact('analizaquestions', 'subject_id'));
然后,在您的 ajax
请求中,传递该值。如果您的 javascript
位于 <script>
文件中的 <script>
元素中,您可以简单地执行以下操作:
window.addEventListener('load', function ()
function submitAnswers()
...
$('.answer_form').each(function ()
$.ajax(
url: "/predmeti/ $subject_id /analiza_answers",
...
window.location.href = "/predmeti/ $subject_id /analiza";
注意: $subject_id
是 .blade.php
语法,用于输出 php
变量 $subject_id
的值。 只要这是一个.blade.php
文件而不是外部.js
文件,它就有效。
如果您的js
在外部.js
文件中,则需要在包含js
之前将值分配给javascript
:
<script type="text/javascript">
var subjectId = " $subject_id ";
</script>
<script src="external.js"></script>
并确保根据需要替换值:
url: "/predmeti/" + subjectId + "/analiza_answers",
window.location.href = "/predmeti/" + subjectId + "/analiza";
此时,当您的ajax
提交时,您的public function store()
中的$subject_id
将与public function show()
的值相同,因为您已成功将url 中的subject
替换为主题ID。
【讨论】:
以上是关于当我尝试使用 laravel 发布表单时,控制台显示“不正确的整数值”。无法识别路由参数的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5:持久化表单数据时,_token 导致批量赋值异常
Laravel Eloquent 搜索表单查询(表单中的多个参数)
从laravel控制器返回json时尝试获取非对象的属性“id”