当我尝试使用 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_answerssubject 发布为$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”

当我尝试使用 Laravel 控制器方法处理 AJAX 请求时,为啥会出现此异常?

Laravel 4 Form::open 设置动作

在laravel中验证从表单到控制器的数据?