【问题标题】:Laravel 8: Data truncated for columnLaravel 8:列截断数据
【发布时间】:2021-04-28 23:29:03
【问题描述】:

我正在使用 Laravel 8 建立一个论坛,在这个论坛中,为了发布问题的答案,我制作了这个表单:

<form action="{{ route('questions.answers', ['question' => $show->id, 'asker' => $show->user->name]) }}" method="POST" enctype="multipart/form-data">
    @csrf
    <div class="mb-4">
        <textarea name="answer" id="answer" class="form-control BSinaBold" rows="7" placeholder="Write down answer"></textarea
        @error('answer')
            <div class="text-red-500 mt-2 text-sm">
                {{ $message }}
            </div>
        @enderror
    </div>
    <br />
    <button type="submit" class="btn btn-primary">Send</button>
</form>

并将其也添加到web.php

Route::post('questions/{question}{asker}/answer' , [QuestionController::class, 'postAnswer'])->name('questions.answers');

最后,这里是postAnswer 方法:

public function postAnswer($id,$name) {
    $validate_data = Validator::make(request()->all(),[
        'answer' => 'required',
    ])->validated();

    $answer = Answer::create([
        'answer' => $validate_data['answer'],
        'user_id' => auth()->user()->id,
        'question_id' => $id,
    ]);    
    $name->notify(new RepliedToThread($id));

    return back();
}

所以这里的$id 变量表示问题ID,$name 是提出问题的人的用户名。

但现在我以某种方式得到了这个错误:

照亮\数据库\查询异常 SQLSTATE[01000]:警告:1265 行 1 的列“question_id”的数据被截断(SQL:插入answersansweruser_idquestion_idupdated_atcreated_at)值(ETC )

那么这里出了什么问题?我该如何解决这个问题?

如果你知道怎么做,请告诉我,我非常感谢你们的任何想法或建议......

提前致谢。

answers表结构:

【问题讨论】:

  • 您的数据库列是什么数据类型?
  • @Aless55 我刚刚加了一张照片
  • 你已经尝试过了? public function postAnswer($request, $id, $name)。我认为您的 $request 在您的 $id 变量中

标签: php laravel laravel-8


【解决方案1】:

您可以尝试分隔您的路由 URL 吗? {question}/{asker}:

Route::post('questions/{question}/{asker}' , [QuestionController::class, 'postAnswer'])->name('questions.answers');

如果可行,您也可以尝试使用-_ 而不是/

【讨论】:

    【解决方案2】:

    使用以下代码:

    刀片文件

    <form action="{{ route('questions.answers', ['question' => $show->id, 'asker' => $show->user->id]) }}" method="POST" enctype="multipart/form-data">
        @csrf
        <div class="mb-4">
            <textarea name="answer" id="answer" class="form-control BSinaBold" rows="7" placeholder="Write down answer"></textarea>
            @error('answer')
                <div class="text-red-500 mt-2 text-sm">
                    {{ $message }}
                </div>
            @enderror
        </div>
        </br>
        <button type="submit" class="btn btn-primary">Send</button>
    </form>
    

    web.php

    Route::post('questions/{question}/{asker}', [QuestionController::class, 'postAnswer'])->name('questions.answers');
    

    postAnswer

    public function postAnswer(Request $request, $question, $asker) {
        $validate_data = $request->validate([
            'answer' => 'required',
        ]);
    
        $answer = Answer::create([
            'answer' => $request->answer,
            'user_id' => auth()->user()->id,
            'question_id' => $question,
        ]);
    
        $asker->notify(new RepliedToThread($question));
    
        return back();
    }
    

    希望你能得到答案。

    【讨论】:

    • 它可以工作并添加答案,但现在显示此错误:Call to a member function notify() on string
    • 我刚刚添加了它,但仍然显示错误!
    • 更新你的postAnswer,我已经更新了我的答案。
    • 它仍然会给出同样的错误,因为他给出的是一个字符串'asker' =&gt; $show-&gt;user-&gt;name,在通知你应该初始化你的模型之前,比如 Model::where('name', $asker) 在这个这种情况不正确,因此您需要传递询问者 id 而不是名称,并且在控制器内部,您应该使用 id 初始化模型,然后通知。 @KKKKKK
    • @ibrahim-dogan 我也试过show-&gt;user-&gt;id,但仍然显示相同的错误。我还需要做什么来初始化 id ?
    猜你喜欢
    • 2017-03-24
    • 2018-07-06
    • 1970-01-01
    • 2015-03-09
    • 2011-07-30
    • 1970-01-01
    • 2013-04-20
    • 2013-10-14
    • 1970-01-01
    相关资源
    最近更新 更多