Почему я получаю 500 ошибок при отправке формы? - PullRequest
1 голос
/ 07 октября 2019

Я хотел бы знать, почему я получаю ошибку 500 при попытке загрузить фотографии в БД. Я чувствую, что мой контроллер испорчен так же, как и мой вызов axios в моем коде React. Пастебин ниже. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

https://pastebin.com/Pv1eigFK

вот App.js

import React, {Component} from 'react';
import axios from 'axios';
import Feed from '../components/Feed/Feed';
import Upload from '../components/Upload/Upload';

import ImagePreview from './ImagePreview/ImagePreview';

class App extends Component {
    constructor(props) {
        super(props);

        this.state = {
            selectedFile: null,
            previewImgURL: '',
            imgPrev: false,
            success: false,
            progress: 0,
            imageChosen: false,
            pictures: [],
            hideForm: true,
        };
        this.imageUpload = this.imageUpload.bind(this);
        this.submitImageAndRedirect = this.submitImageAndRedirect.bind(this);
        this.postIsClicked = this.postIsClicked.bind(this);
        this.feedView = this.feedView.bind(this);
    }

    imagePreview(newPostImageBool) {
        this.setState({imgPrev: newPostImageBool});

        if (this.state.selectedFile === null) {
            alert("can't preview a picture on this because it's empty");
            this.setState({imgPrev: false});
        }
    };

    closeModal() {
        this.setState({imgPrev: false});
    };

    imageUpload(e) {
        let reader = new FileReader();
        let file = e.target.files[0];

        reader.onloadend = () => {
            this.setState({
                selectedFile: file,
                previewImgURL: reader.result,
                pictures: [reader.result]
            }, () => {
                console.log(this.state.pictures);
            })
        };

        if (file) reader.readAsDataURL(file); // Allows user to preview image uploaded

        this.setState(() => ({file}));
        this.setState({success: true, imageChosen: true});
    }

    submitImageAndRedirect() {
        // e.preventDefault();
        let picUrl = this.state.previewImgURL;
        axios.post('/home', {
            body: picUrl
        }).then(response => {
            // console
            console.log(response);
            // set state
            this.setState({
                pictures: [picUrl, response.data]
            });
        });

        console.log("submitImageAndRedirect() triggered");
    }

    postIsClicked(e) {
        console.log("postIsClicked(e) triggered");

        if (e.target.value === "Yes") {
            this.feedView();
            this.submitImageAndRedirect();
            console.log(`Yes has been clicked... inside Yes if block`);
        } else {
            alert("No clicked");
        }
    }

    feedView() {
        this.setState({hideForm: false}, () => console.log(this.state.hideForm));
    }

    render() {
        return (
            <div className="feed-wrapper">
                {this.state.success ?
                    <div className="alert alert-success">
                        <strong>Chosen image is successful!
                            Now click Preview and make sure that's the one you want to upload!</strong>
                    </div> : null}

                {this.state.hideForm ?
                    <form onSubmit={this.submitImageAndRedirect}>
                        <div className="inputWrapper">
                            <input
                                id="new_post_image"
                                name="post_image"
                                className="button is-success is-outlined"
                                type="file"
                                style={{display: 'none'}}
                                onChange={this.imageUpload}
                                accept="image/*"
                            />

                            <Upload/>

                            <br/>
                            {
                                this.state.imageChosen ?
                                    <div className="uploaded-pics">
                                        <ImagePreview src={this.state.previewImgURL} onClick={this.postIsClicked}/>
                                    </div> : null
                            }
                        </div>
                    </form>
                    : null
                }

                {!this.state.hideForm ?
                    this.state.pictures.map(post => {
                        return <Feed src={post} />
                    })
                :null}
            </div>
        );
    }
}

export default App;

Вот мой контроллер:

<?php

namespace App\Http\Controllers;

use App\User;
use App\PostPictures;
use Illuminate\Http\Request;

class PostPicturesController extends Controller
{
    public function create(Request $request, PostPictures $postPicture) {
        $uploadPic = $postPicture->user()->postPictures->create([
            'body' => $request->body
        ]);

        return response()->json($postPicture->with('user')->find($uploadPic->id));
    }
}

ошибка в консоли:

POST http://mywebsite.test/home 500 (Internal Server Error)

ошибка в журналах Laravel:

[2019-10-06 16:25:56] local.ERROR: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'mywebsite.post_pictures' doesn't exist (SQL: select * from `post_pictures` where `post_pictures`.`user_id` = 5 and `post_pictures`.`user_id` is not null) {"userId":5,"exception":"[object] (Illuminate\\Database\\QueryException(code: 42S02): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'mywebsite.post_pictures' doesn't exist (SQL: select * from `post_pictures` where `post_pictures`.`user_id` = 5 and `post_pictures`.`user_id` is not null) at /Users/garenvartanian/workstation/mywebsite/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664, PDOException(code: 42S02): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'mywebsite.post_pictures' doesn't exist at /Users/garenvartanian/workstation/mywebsite/vendor/laravel/framework/src/Illuminate/Database/Connection.php:326)
[stacktrace]

1 Ответ

2 голосов
/ 07 октября 2019

В сообщении об ошибке Laravel не может найти вашу таблицу post_pictures в базе данных mywebsite.

Вы создали таблицу?

  • , если вы не хотите создать миграцию для make table: https://laravel.com/docs/5.8/migrations
  • когда-нибудь вы захотите создать модельИмя отличается от имени таблицы в базе данных. Вам может понадобиться добавить имя таблицы в модель, например:
class Flight extends Model
{
    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'my_flights';
}

надеюсь, это поможет. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...