質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

2回答

2371閲覧

VueからPOSTした値をLaravel側でデータベースに保存したい。

Tikka123456

総合スコア34

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2021/05/29 05:59

編集2021/05/29 10:04

VueのコンポーネントからaxiosでPOSTした値をLaravelに渡してデータベースに保存する処理を実装したいです。
いま現在の処理では、**POST http://localhost:8000/api/test 500 (Internal Server Error)**と出ています。
サーバー内でのエラーなのでコントローラーの処理がおかしいのではと思いますが皆目分かりません。

"laravel/framework": "^6.20.26",

エラーの詳細

{data: {…}, status: 500, statusText: "Internal Server Error", headers: {…}, config: {…}, …} config: {url: "http://localhost:8000/api/test", method: "post", data: "{"content":""}", headers: {…}, transformRequest: Array(1), …} data: {message: "SQLSTATE[23000]: Integrity constraint violation: 1…es (?, 2021-05-29 14:20:40, 2021-05-29 14:20:40))", exception: "Illuminate\Database\QueryException", file: "C:\Users\Admin\tests\vendor\larav…\framework\src\Illuminate\Database\Connection.php", line: 669, trace: Array(48)} headers: {cache-control: "no-cache, private", content-type: "application/json"} request: XMLHttpRequest {readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, onreadystatechange: ƒ, …} status: 500 statusText: "Internal Server Error" __proto__: Object

PostmanでAPI通信のテストをした際も500Internal Server Errorと出ます。

Laravel側の処理
api.php

Route::group(['middleware' => ['api', 'cors']], function(){ Route::OPTIONS('test', function(){ return response()->json(); }); Route::POST('test', 'Api\TestController@store'); });

TestController.php

<?php namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\Test; class KeywordController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request, Test $test) { $test->content = $request->test; $test->save(); } }

Vue側の処理
InputTest.vue

<template> <el-form label-width="80px"> <input id="test" type="text" v-model="test"> <el-button @click="createTest" type="primary" round>登録</el-button> </el-form> </template> <script> import axios from 'axios'; export default { data() { return { test: '', }; }, methods: { createTest() { const data = { content: this.test } axios.post('http://localhost:8000/api/test', data) .then(res => { console.log(res); this.test = res.data.test; }).catch(error => { console.log(error.response); }); } }, // created() { // this.createTest() // } } </script>

エラーログ

[previous exception] [object] (PDOException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'content' cannot be null at C:\laravel\framework\src\Illuminate\Database\Connection.php:463) [stacktrace] #0 C:\laravel\framework\src\Illuminate\Database\Connection.php(463): PDOStatement->execute() #1 C:\laravel\framework\src\Illuminate\Database\Connection.php(662): Illuminate\Database\Connection->Illuminate\Database\{closure}('insert into `ke...', Array) #2 C:\laravel\framework\src\Illuminate\Database\Connection.php(629): Illuminate\Database\Connection->runQueryCallback('insert into `ke...', Array, Object(Closure)) #3 C:\laravel\framework\src\Illuminate\Database\Connection.php(464): Illuminate\Database\Connection->run('insert into `ke...', Array, Object(Closure)) #4 C:\laravel\framework\src\Illuminate\Database\Connection.php(416): Illuminate\Database\Connection->statement('insert into `ke...', Array)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

attakei

2021/05/29 08:06

Internal Server Errorなのであれば、Laravel(もしくはWebサーバー)で何かしらのエラーがファイル出力されていると思うので、まずはそこの確認からしてみてはどうでしょうか。
Tikka123456

2021/05/29 10:06

エラー内容を追記しました。 どうやらcontent(データベースのカラム)がNullなようです。Vueで正常に値が送れていないのでしょうか
guest

回答2

0

ベストアンサー

VueもLaravelも厳密な文法やクラス構造をあまり覚えていないのですが、以下の点が気になります。

javascript

1 const data = { 2 content: this.test 3 } 4 5 axios.post('http://localhost:8000/api/test', data)

送信側には contentというパラーメーターで送っているのに対して、

PHP

1 2 /** 3 * Store a newly created resource in storage. 4 * 5 * @param \Illuminate\Http\Request $request 6 * @return \Illuminate\Http\Response 7 */ 8 public function store(Request $request, Test $test) 9 { 10 $test->content = $request->test; 11 $test->save(); 12 }

受信側は、リクエストオブジェクトからtestという名前でプロパティを取ろうとしています。

このあたりの整合性が取れていないような気がするので、
そのあたりを正しいかの確認をするところから見ていけばいいとは思います。

(文法上、どう書けばいいかはすぐには思い出せないので、回答としては一旦これ以上はすぐに出ないです)

投稿2021/05/29 12:09

attakei

総合スコア2738

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tikka123456

2021/05/29 12:46

回答ありがとうございます。アドバイスを基に今一度考えてみます
guest

0

データベースのテーブルのカラムがNULL許容になっていないのでは?

投稿2021/05/29 12:01

yuki84web

総合スコア1857

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問