'title' не имеет ошибки значения по умолчанию 500 в Laravel

Привет, я пытаюсь создать сообщение, используя данные формы, потому что у меня есть входной файл для загрузки изображений. Я действительно пытаюсь заставить загруженный файл работать. Я получаю ошибку 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'];

person I Love Code    schedule 30.01.2018    source источник
comment
Пожалуйста, покажите результат dd($request->all());   -  person Alexey Mezenin    schedule 30.01.2018
comment
Он показывает пустой массив '[]'   -  person I Love Code    schedule 30.01.2018
comment
это означает, что вы не получаете formData   -  person Jigar Shah    schedule 30.01.2018
comment
Что может быть не так с данными формы?   -  person I Love Code    schedule 30.01.2018
comment
Передайте данные как data: formData   -  person linktoahref    schedule 30.01.2018
comment
@linktoahref спасибо - теперь массив показывает. Однако я думаю, что с моей настройкой загрузки файла все еще что-то не так - я все еще получаю ошибку 500. Этот процесс загрузки файла очень сложен для меня.   -  person I Love Code    schedule 30.01.2018
comment
Что за ошибка? Пожалуйста, будьте конкретны   -  person linktoahref    schedule 30.01.2018
comment
Это проблема - мой файл журнала обновляется вечно, а на вкладке моей сети в ответе - это просто сценарий, а при предварительном просмотре появляется массив, поэтому я не знаю, что это за ошибка, за исключением того, что это внутренняя ошибка сервера 500   -  person I Love Code    schedule 30.01.2018
comment
Я не уверен, что подразумевается под значением по умолчанию. Значение по умолчанию, которое будет использоваться, когда ваш заголовок пуст. В своем файле миграции вы можете $table->string('title')->default('Untitled')   -  person brombeer    schedule 30.01.2018


Ответы (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)

}

Документация по хранению загруженных файлов

person linktoahref    schedule 30.01.2018
comment
Вау, спасибо, я попробую и дам вам знать. Огромное спасибо - person I Love Code; 30.01.2018
comment
просто хочу сообщить, что я пришел прямо сегодня утром (наконец-то). Я боролся с получением каталога, но потом я понял, что ошибся с моей стороны, но теперь он работает. Большое спасибо за вашу помощь. - person I Love Code; 01.02.2018
comment
@Horcrux Рад, что смог помочь! - person linktoahref; 01.02.2018