前提・実現したいこと
PHP初心者です。
laravelでREST APIの実装をしているのですが、curlコマンドでPOST送信でstoreを実行しても、コマンドのオプションに指定しているパラメータがDBへ登録されていません。
ちゃんとPOST送信したパラメータをDBに登録するためには、あとどのような実装が必要でしょうか。
teratailもPHPも不慣れなためお見苦しいところはあるかと思いますが、必要な情報は追記してきますので、よろしくお願いいたします。
実行したコマンドとそのレスポンス
コマンド:contentに「test_content」という値を指定して、テーブルにレコードを追加したい。 curl -XPOST -d 'content=test_content' http://127.0.0.1:8000/api/ttweet/ 実行結果(レスポンスで追加されたレコードを返すようにしています。) {"message":"Tweet created successfully","data":{"content":null,"url":null,"updated_at":"2021-03-14T02:40:33.000000Z","created_at":"2021-03-14T02:40:33.000000Z","id":11}} ↑レコードは挿入されているのですが、値を指定したはずの「content」のカラムがnullになっています。
該当のソースコード
\app\Http\Controllers\TtweetController.php
PHP
1<?php 2 3namespace App\Http\Controllers; 4use Illuminate\Http\Request; 5use App\Models\Ttweet; 6use App\Http\Requests\StoreTtweet; 7 8class TtweetController extends Controller 9{ 10 /** 11 * Display a listing of the resource. 12 * 13 * @return \Illuminate\Http\Response 14 */ 15 public function index() 16 { 17 return response(Ttweet::all()); 18 } 19 20 /** 21 * Show the form for creating a new resource. 22 * 23 * @return \Illuminate\Http\Response 24 */ 25 public function create() 26 { 27 } 28 29 /** 30 * Store a newly created resource in storage. 31 * 32 * @param \Illuminate\Http\Request $request 33 * @return \Illuminate\Http\Response 34 */ 35 public function store(Request $request) 36 { 37 $tweet = new Ttweet(); 38 $tweet->content = $request->input('content'); 39 $tweet->url = $request->input('url'); 40 $tweet->save(); 41 42 return response()->json([ 43 'message' => 'Tweet created successfully', 44 'data' => $tweet 45 ], 201, [], JSON_UNESCAPED_UNICODE); 46 } 47 48 /** 49 * Display the specified resource. 50 * 51 * @param int $id 52 * @return \Illuminate\Http\Response 53 */ 54 public function show($id) 55 { 56 $tweet = Ttweet::find($id); 57 if ($tweet) { 58 return response()->json([ 59 'message' => 'ok', 60 'data' => $tweet 61 ], 200, [], JSON_UNESCAPED_UNICODE); 62 } else { 63 return response()->json([ 64 'message' => 'Tweet not found', 65 ], 404); 66 } 67 } 68 69 /** 70 * Show the form for editing the specified resource. 71 * 72 * @param int $id 73 * @return \Illuminate\Http\Response 74 */ 75 public function edit($id) 76 { 77 78 } 79 80 /** 81 * Update the specified resource in storage. 82 * 83 * @param \Illuminate\Http\Request $request 84 * @param int $id 85 * @return \Illuminate\Http\Response 86 */ 87 public function update(Request $request, $id) 88 { 89 // 90 } 91 92 /** 93 * Remove the specified resource from storage. 94 * 95 * @param int $id 96 * @return \Illuminate\Http\Response 97 */ 98 public function destroy($id) 99 { 100 $tweet = Ttweet::where('id', $id)->delete(); 101 if ($tweet) { 102 return response()->json([ 103 'message' => 'Tweet deleted successfully', 104 ], 200); 105 } else { 106 return response()->json([ 107 'message' => 'Tweet not found', 108 ], 404); 109 } 110 } 111} 112
\webapp\app\Models\Ttweet.php
PHP
1<?php 2 3namespace App\Models; 4 5use Illuminate\Database\Eloquent\Factories\HasFactory; 6use Illuminate\Database\Eloquent\Model; 7 8class Ttweet extends Model 9{ 10 use HasFactory; 11 protected $table = 'T_TWEET'; 12 13 const CONTENT = 'content'; 14 const URL = 'url'; 15 16 protected $fillable = [ 17 'content', 18 'url', 19 ]; 20}
試したこと
こちらのサイトを参考に作成しました。
https://noumenon-th.net/programming/2020/02/12/laravel-api/
他のshow、index、destroyは実行できていることは確認しています。
※追記※
その後で自分で確認したところ、Windows10のコマンドプロンプトで実行すると値が設定できず、git bashで実行すると値が設定できることを確認できました。 ひとまずソースには問題はなかったようです。
git bashの場合
$ curl -V
curl 7.74.0 (x86_64-w64-mingw32) libcurl/7.74.0 OpenSSL/1.1.1i (Schannel) zlib/1.2.11 brotli/1.0.9 zstd/1.4.5 libidn2/2.3.0 libssh2/1.9.0 nghttp2/1.41.0
Release-Date: 2020-12-09
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS brotli HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz Metalink MultiSSL NTLM SPNEGO SSL SSPI TLS-SRP zstd
コマンドプロンプトの場合
curl -V
curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL
Release-Date: 2017-11-14, security patched: 2019-11-05
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL
補足情報(FW/ツールのバージョンなど)
使用環境
Laravel v8.26.1 (PHP v8.0.1)
回答1件
あなたの回答
tips
プレビュー