laravelでデータベースにレコードを追加する際にエラーがでる
解決したいこと
laravelのコントローラーでfill()を使ってデータベースにレコードを作ろうとすると、roomId,commentの値がnullというエラーが出る。
開発環境は下記のとおりです。
laravel 8
データベース:sqlite
発生している問題・エラー
SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: comments.roomId (SQL: insert into
"comments" ("id", "updated_at", "created_at") values (1, 2021-03-16 21:54:25, 2021-03-16 21:54:
該当するソースコード
homeContoller.php
public function watch(Request $request)
{
$id = $request->id;
$roomData = DB::table('rooms')->where('id', $id)->first();
return view('watch', ['roomData' => $roomData]);
}
public function ajax(Request $request)
{
$commentForm = $request->all();
$comment = new Comment;
unset($commentForm['_token']);
$comment->fill($commentForm)->save();
return $comment;
}
watch.blade.php
@section('body')
<div class="movieBlock">
<iframe src="{{$roomData->movieUrl}}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<div class='commentList'></div>
<form action="/watch/ajax?id={{$roomData->id}}" method="post" class="commentBlock">
@csrf
<p>{{$roomData->id}}</p>
<input type="text" name="comment">
<input type="number" name="roomId" value="{{$roomData->id}}">
<input type="submit" value="コメントする" class="commentBtn">
</form>
</div>
<script type="module" src="{{asset('js/comment.js')}}"></script>
@endsection
Comment.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
use HasFactory;
protected $fillable = [
'id',
];
}
2021_03_16_create_comments_table.php
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateCommentsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('comments', function (Blueprint $table) {
$table->increments('id');
$table->string('roomId');
$table->string('comment');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('comments');
}
}
自分で試したこと
1.not nullと言われるroomId,commentからnot null制約?を外し、データベースでレコードの確認をしましたが、どちらもnot nullになっていました。
2.
php
$comment->roomId = $request->roomId;
$comment->comment = $request->comment;
$comment->save();
では上手く動きましたが、create()->やfill()を使うと、roomIdやcommentがnot nullになってしまうのがなぜだかわかりません。
laravelを学習し始めて間もないので、簡単なミスかもしれませんが、教えていただけると嬉しいです。
0