【问题标题】:'title' does not have default value error 500 in Laravel'title' 在 Laravel 中没有默认值错误 500
【发布时间】:2018-01-30 12:54:44
【问题描述】:

您好,我正在尝试使用表单数据创建帖子,因为我有一个文件输入来上传图像。我真的很难让上传文件正常工作。当我尝试创建帖子时收到错误 500,并显示消息

SQLSTATE[HY000]:一般错误:1364 字段'title'没有默认值(SQL:插入posts('updated_at','created_at')值(2018-01-30 12:31) :18, 2018-01-30 12:31:18)。

我不确定默认值是什么意思。我检查了我的$fillables,标题肯定在那里。当我在顶部的控制器中运行以下代码时,它会通过:

$request->all();
return response()->json('passed');

但是当我的控制器中有以下内容时,它会给出错误:

public function create(Request $request)
{
    Post::create($request->all());

    $response = [
        'response' => 'Post Created Successfully',
        'error' => 'Something went wrong'
    ];

    return response()->json($response);
}

这是我的 HTML:

<div class="container">
    <div class="row">
        <h1>Create your post</h1>
        <div class="form-group">
            <label for="title">Title</label>
            <input type="text" name="title" id="title" class="form-control">
        </div>
        <div class="form-group">
            <label for="post">Post</label>
            <textarea name="post" rows="8" cols="80" id="post" class="form-control"></textarea>
        </div>
        <div class="form-group">
            <label for="image">Add image</label>
            <input type="file" name="image" id="image" class="form-control">
        </div>
        <input type="submit" name="submit" value="Submit Post" id="submit" class="btn btn-primary">
    </div>
</div>

AJAX:

<script>
$(document).ready(function() {
    $("#submit").on("click", function(e) {
        e.preventDefault();

        var formData = new FormData();
        var fileData = $('#image').prop('files')[0];
        var title = $('#title').val();
        var post = $('#post').val();

        formData.append('fileData', fileData);
        formData.append('title', title);
        formData.append('post', post);

        $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr("content")
            }
        });

        $.ajax({
            url:'/post/create/create',
            type: "POST",
            data: {
                formData: formData
            },
            processData: false,
            contentType: false,
            dataType: 'json',

            success:function(response){
                toastr.success(response.response);
            },
            error: function(error){
                toastr.error(error.error)
            }
        });

    });
});
</script>

这是我的带有填充物的 Post 模型:

protected $fillable = ['title', 'post', 'user_id', 'uploadImage'];

【问题讨论】:

  • 请显示dd($request-&gt;all());的结果
  • 它显示一个空数组'[]'
  • 这意味着你没有得到 formData
  • formdata 可能有什么问题?
  • data: formData传递数据

标签: php ajax laravel


【解决方案1】:

为了从控制器中的 ajax 获取数据,请将数据传递为

data: formData

而不是

data: {
     formData: formData
}

您可以将控制器中的信息处理为

public function create(Request $request)
{

    $path = '';

    if ($request->hasFile('fileData')) {
        if ($request->file('fileData')->isValid()) {
            // Upload the file
            $path = $request->fileData->store('your directory');
        }
    }

    $post = Post::create([
        'title' => $request->title,
        'post' => $request->post,
        'user_id' => auth()->user()->id,
        'uploadImage' => $path
    ]);

    if ($post) {
        return response()->json([
            'response' => 'Post Created Successfully!'
        ]);
    }

    return response()->json([
        'error' => 'Something went wrong!'
    ], 500)

}

Documentation关于存储上传的文件

【讨论】:

  • 哇,谢谢,我会试试这个,让你知道。非常感谢
  • 只是想让你知道我今天早上来对了(终于)。我努力获取目录,然后我意识到我的一个错误,但它现在正在工作。非常感谢您的帮助。
  • @Horcrux 很高兴我能帮上忙!
猜你喜欢
  • 2021-01-05
  • 1970-01-01
  • 1970-01-01
  • 2019-02-05
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
相关资源
最近更新 更多