Аксиос пост запрос на отказ от реагировать передний конец фреймворк Laravel и MySQL
я недавно начал изучать Laravel и всю структуру PHP бэкенда. Я пытаюсь сделать простой запрос post из формы, которую я сделал с React, и я хочу, чтобы он был сохранен в моей базе данных sql. Я уже создал модель, переношу таблицу в БД. Существует только одно поле, и это имя вставляется во входной текст. пока что это мой код.: форма реакции:
import React, {Component} from "react";
import axios from "axios";
export default class App extends Component {
constructor(props) {
super(props);
this.state= {
name: ""
}
this.onSubmit= this.onSubmit.bind(this);
this.onChange=this.onChange.bind(this);
}
onChange = e =>{
this.setState({
name: e.target.value
})
}
onSubmit(e){
e.preventDefault();
const {name} = this.state;
let data = {
name: name
};
axios.post('/', data)
.then(response => {
console.log(data);
})
.catch(err => {
console.log(err);
})
};
render() {
return (
<>
<div>
<form onSubmit={this.onSubmit}>
<label>name</label>
<input type="text" onChange={this.onChange}></input>
<button type="submit">submit</button>
</form>
<h1>{this.state.name}</h1>
</div>
</>
);
}
}
Маршрут:
<?php
use Illuminate\Support\Facades\Route;
// The frontend is an SPA, so point all URIs (except /api/*) to the AppController.
Route::get('{uri?}', 'AppController@app')->where(['uri' => '^(?!api).*$'])->name('app');
Route::post('/', 'StoreDataCOntroller@store');
?>
Мой контроллер:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Form;
class StoreDataCOntroller extends Controller
{
public function store(){
$data = new Form();
$data->name = request('name');
$data->save();
}
}
Модель (пустая):
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Form extends Model
{
//
}
а миграция:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateFormsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('forms', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string("name");
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('forms');
}
}
мой env файл:
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:ZJmPVhi6byB/kzZt/IEyEBFYK3QUVc6b+65ITHDo/pM=
APP_DEBUG=true
APP_URL=http://localhost:8080
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=test
DB_PASSWORD=ciaoss
Теперь, когда в react input я нажимаю submit, у меня будет общая ошибка "internal server error 500". Что я делаю не так? спасибо за помощь :)
РЕДАКТИРОВАТЬ: Информация журнала ошибок
[previous exception] [object] (PDOException(code: 42S22): SQLSTATE[42S22]: Column not found: 1054 Unknown column 'updated_at' in 'field list' at C:\\xampp\\htdocs\\dev-test\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Connection.php:453)


Ответы - Аксиос пост запрос на отказ от реагировать передний конец фреймворк Laravel и MySQL / Axios post request failure from React front end to Laravel and mysql

19.01.2020 10:19:05
Проблема в том, что по умолчанию Laravel ожидает, что поля timestamps (created_at и updated_at) будут созданы путем миграции. Это оставляет вам два варианта
Скажите модели, что нет никаких временных меток
class Form extends Model { public $timestamps = false; }
Добавьте к вашим меткам времени миграции
class CreateFormsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('forms', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string("name");
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('forms');
}
}
Кроме того, в контроллере функция должна возвращать некоторый ответ.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Form;
class StoreDataCOntroller extends Controller
{
public function store(){
$data = new Form();
$data->name = request('name');
$data->save();
return response()->created();
}
}











20.01.2020 01:40:50
Как видно на вашем Ларавеле.журнал, у вас есть ошибка: столбец не найден: 1054 неизвестный столбец "updated_at" в "списке полей"
В вашей модели формы вы должны установить
public $timestamps = false;


