前提・実現したいこと
・Laravelを利用してローカル環境にサイトを作ろうとしています。
・データベースに情報を登録するため、シーディングを実行するもエラーが表示されてうまくいきません。
お手本のサイト(https://note.com/mukae9/n/naf7dff31b4db)の末尾に、
■migration機能を使ってid(bigIncrements),name(string,50),age(int)カラムを持ったmineテーブルを作る
■MineTableSeederを作成し、自分の名前と年齢をDBファサードで挿入できるようにする。
■シーディングを実行する。
との課題があるので、それに従って作ろうとしています。
(答えは書かれていません)
発生している問題・エラーメッセージ
MineTableSeeder.phpというファイルに記載した内容をテーブルに登録しようとしています。
しかしphp artisan db:seed
を実行すると下記のような状況になります。
root@17fc25ef4b3d:/var/www/app# php artisan db:seed Seeding: StockTableSeeder Seeded: StockTableSeeder (0.28 seconds) Seeding: MineTableSeeder Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1364 Field 'bigIncrements' doesn't have a default value (SQL: insert into `mine` (`name`, `age`) values (yamada, 25)) at /var/www/app/vendor/laravel/framework/src/Illuminate/Database/Connection.php:669 665| // If an exception occurs when attempting to run a query, we'll format the error 666| // message to include the bindings with SQL, which will make this exception a 667| // lot more helpful to the developer instead of just the database's errors. 668| catch (Exception $e) { > 669| throw new QueryException( 670| $query, $this->prepareBindings($bindings), $e 671| ); 672| } 673| Exception trace: 1 PDOException::("SQLSTATE[HY000]: General error: 1364 Field 'bigIncrements' doesn't have a default value") /var/www/app/vendor/laravel/framework/src/Illuminate/Database/Connection.php:463 2 PDOStatement::execute() /var/www/app/vendor/laravel/framework/src/Illuminate/Database/Connection.php:463 Please use the argument -v to see more details.
「bigIncrements(IDのこと?)というフィールドにはデフォルトの値が設定されていません」
と言われているように見えます。
お手本のサイトでは「id(bigIncrements)」を作成する指示になっていますが、そもそも何のために作成するのか意図は理解できていません。
IDなので、上から順に自動で数字が割り振られるものなのかな?ぐらいに思っていました。
該当のソースコード
↓テーブル作成時に設定したマイグレーションファイル
php
1//2020_11_04_120350_create_mine_table.php 2 3<?php 4 5use Illuminate\Database\Migrations\Migration; 6use Illuminate\Database\Schema\Blueprint; 7use Illuminate\Support\Facades\Schema; 8 9class CreateMineTable extends Migration 10{ 11 /** 12 * Run the migrations. 13 * 14 * @return void 15 */ 16 public function up(){ 17 Schema::create('mine', function (Blueprint $table) { 18 $table->bigIncrements( 'id' ); 19 $table->timestamps(); 20 $table->string( 'name',50 ); 21 $table->integer( 'age' ); 22 }); 23 } 24 25 /** 26 * Reverse the migrations. 27 * 28 * @return void 29 */ 30 public function down() 31 { 32 Schema::dropIfExists('mine'); 33 } 34} 35
↓データベースへの情報登録に利用し用としているシーダー
php
1//MineTableSeeder.php 2 3<?php 4 5use Illuminate\Database\Seeder; 6use Illuminate\Support\Facades\DB; 7 8class MineTableSeeder extends Seeder 9{ 10 /** 11 * Run the database seeds. 12 * 13 * @return void 14 */ 15 public function run() { 16 DB::table( 'mine' )->truncate(); 17 DB::table( 'mine' )->insert( [ 18 'name' => 'yamada', 19 'age' => 25, 20 ] ); 21 } 22}
試したこと
■IDに空を登録できるか検証
コマンドphp artisan db:seed
を実行したときに、上記エラーにこのようにありました。
"SQLSTATE[HY000]: General error: 1364 Field 'bigIncrements' doesn't have a default value"
いったん空の値を追加してみようと思い、マイグレーションファイルに
'id' => ,
と追記してみました。
php
1//2020_11_04_120350_create_mine_table.php 2 3<?php 4 5use Illuminate\ Database\ Seeder; 6use Illuminate\ Support\ Facades\ DB; 7 8class MineTableSeeder extends Seeder { 9 /** 10 * Run the database seeds. 11 * 12 * @return void 13 */ 14 public function run() { 15 DB::table( 'mine' )->truncate(); 16 DB::table( 'mine' )->insert( [ 17 'id' => '',//追記 18 'name' => 'yamada', 19 'age' => 25, 20 ] ); 21 } 22} 23
コマンドphp artisan db:seed
を再び実行すると下記のエラーになりました。
Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'id' at row 1 (SQL: insert into `mine` (`id`, `name`, `age`) values (, yamada, 25))
空ではNGみたいです。
シングルクオーテーションで囲んではいけないのか
とも思ったのですが、空にするなら囲まないとエディター上でエラーになります。
■数値なら登録できるか検証
id(bigIncrements)の役割はわかりませんが、数字をシーダーに入れておけば先に進めるか試しました。
'id' => 123,
を追記しました。
php
1//2020_11_04_120350_create_mine_table.php 2 3<?php 4 5use Illuminate\ Database\ Seeder; 6use Illuminate\ Support\ Facades\ DB; 7 8class MineTableSeeder extends Seeder { 9 /** 10 * Run the database seeds. 11 * 12 * @return void 13 */ 14 public function run() { 15 DB::table( 'mine' )->truncate(); 16 DB::table( 'mine' )->insert( [ 17 'id' => 123,//追記 18 'name' => 'yamada', 19 'age' => 25, 20 ] ); 21 } 22}
↓シーディングを実行すると、やはりエラーです。
Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1364 Field 'bigIncrements' doesn't have a default value (SQL: insert into `mine` (`id`, `name`, `age`) values (123, yamada, 25)) at /var/www/app/vendor/laravel/framework/src/Illuminate/Database/Connection.php:669 665| // If an exception occurs when attempting to run a query, we'll format the error 666| // message to include the bindings with SQL, which will make this exception a 667| // lot more helpful to the developer instead of just the database's errors. 668| catch (Exception $e) { > 669| throw new QueryException( 670| $query, $this->prepareBindings($bindings), $e 671| ); 672| } 673| Exception trace: 1 PDOException::("SQLSTATE[HY000]: General error: 1364 Field 'bigIncrements' doesn't have a default value") /var/www/app/vendor/laravel/framework/src/Illuminate/Database/Connection.php:463 2 PDOStatement::execute() /var/www/app/vendor/laravel/framework/src/Illuminate/Database/Connection.php:463 Please use the argument -v to see more details. root@17fc25ef4b3d:/var/www/app#
id(bigIncrements)の役割、何か値を登録するべきなのか
そもそも自動で何か値が割り振られるものなのかわかりませんでした。
どなたか知恵を貸していただけないでしょうか。
補足情報(FW/ツールのバージョンなど)
Windows10 pro
Docker version 19.03.13
php7.4.11
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。