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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

4767閲覧

General error: 1364 Field 'user_id' doesn't have a default valueのエラー対処方法(seed作成時)

kuwabaraakinori

総合スコア10

Laravel

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/07/06 07:02

前提・実現したいこと

初心者です。PHPのフレームワークLaravelを使って旅行投稿サイトを製作中です。
コンテンツのサンプルデーターを作りたくシードでサンプルデータを作ろうとしています。
しかし、artisanコマンド作成しようとしてもエラーが表示されてしまいます。
user_idのnullは強要しません。

ご教示いただけますと幸いです。

発生している問題・エラーメッセージ

SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a default value (SQL: insert into `contents` (`title`, `content`, `continent`, `country`, `span`, `costs`, `picture`) values (初めての海外旅行, 本当に楽しかった。, アジア, 中国・ 韓国・台湾, 15, 200000, 写真がいっぱい1))

該当のソースコード

マイグレーションファイル

public function up() { Schema::create('contents', function (Blueprint $table) { $table->bigIncrements('id'); $table->unsignedBigInteger('user_id'); $table->string('title' , 50); $table->string('continent'); $table->string('country'); $table->string('picture'); $table->string('content' , 500); $table->integer('costs'); $table->integer('span'); $table->timestamps(); //外部キー制約 $table->foreign('user_id')->references('id')->on('users'); }); }

Content モデル

class Content extends Model { protected $fillable = ['content' , 'title' , 'picture' , 'span' , 'costs' , 'continent' , 'country']; public function user() { return $this->belongsTo(User::class); } }

ContentsTableSeeder

public function run() { for($i=1 ; $i<=5 ; $i++) { DB::table('contents')->insert([ 'title'=>'初めての海外旅行', 'content'=>'本当に楽しかった。', 'continent'=>'アジア', 'country'=>'中国・韓国・台湾', 'span'=>'15', 'costs'=>'200000', 'picture'=>'写真がいっぱい'.$i ]); } }

試したこと

・ALTER TABLE テーブル名 ALTER フィールド名 SET DEFAULT デフォルト値;でデフォルト値を設定してもうまくいきませんでした。

補足情報(FW/ツールのバージョンなど)

Laravel Framework 6.18.22

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

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

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

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

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

guest

回答2

0

回答ありがとうございます。

追加で質問よろしいでしょうか?説目不足で申し訳ないのですが、useとcontentsで一対多の関係で設計しております。ユーザーはシードでサンプルデータを作成しております。

UsersTableSeed

1public function run() 2 { 3 for($i=1 ; $i<=10 ; $i++) 4 { 5 DB::table('users')->insert([ 6 "name"=>"testさん" .$i, 7 "email"=>"test@test.jp".$i, 8 "password"=>"kaai1733".$i 9 ]); 10 } 11 }

これでユーザーid1のユーザーは作成しました。User::find(1)としっかりと表示はされました。

しかし、User classは存在しないとエラー表示されてしまいます。User modelは作成してあります。

ContentsTableSeeder

1public function run() 2 { 3 $user = User::find(1); 4 for($i=1 ; $i<=5 ; $i++) 5 { 6 DB::table('contents')->insert([ 7 'title'=>'初めての海外旅行', 8 'user_id' => $user->id, 9 'content'=>'本当に楽しかった。', 10 'continent'=>'アジア', 11 'country'=>'中国・韓国・台湾', 12 'span'=>'15', 13 'costs'=>'200000', 14 'picture'=>'写真がいっぱい'.$i 15 ]); 16 } 17 }

なぜこのエラーが出てしまうのかさっぱりでどう対処したらいいのか分からず困っています。少しでもご教示いただけると幸いです。

投稿2020/07/06 08:24

kuwabaraakinori

総合スコア10

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

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

0

ベストアンサー

デフォルトでは、nullが許可されていないので、
nullでもいいのなら、nullable()が必要です。

php

1// before 2$table->unsignedBigInteger('user_id'); 3 4// after 5$table->unsignedBigInteger('user_id')->nullable();

nullを許可しないなら、以下のようにuser_idを入れないといけません。
以下の例では、idが1のユーザーがいる前提で動きます。また、contentsの追加されるデータのuser_idは全て1になります。

php

1public function run() 2 { 3 $user = User::find(1); 4 for($i=1 ; $i<=5 ; $i++) 5 { 6 DB::table('contents')->insert([ 7 'title'=>'初めての海外旅行', 8 'user_id' => $user->id, 9 'content'=>'本当に楽しかった。', 10 'continent'=>'アジア', 11 'country'=>'中国・韓国・台湾', 12 'span'=>'15', 13 'costs'=>'200000', 14 'picture'=>'写真がいっぱい'.$i 15 ]); 16 } 17 }

投稿2020/07/06 07:34

hayato7

総合スコア1135

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

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

kuwabaraakinori

2020/07/06 08:26

回答ありがとうございます。 追加で質問よろしいでしょうか?説目不足で申し訳ないのですが、useとcontentsで一対多の関係で設計しております。ユーザーはシードでサンプルデータを作成しております。 ```UsersTableSeed public function run() { for($i=1 ; $i<=10 ; $i++) { DB::table('users')->insert([ "name"=>"testさん" .$i, "email"=>"test@test.jp".$i, "password"=>"kaai1733".$i ]); } } ``` これでユーザーid1のユーザーは作成しました。User::find(1)としっかりと表示はされました。 しかし、User classは存在しないとエラー表示されてしまいます。User modelは作成してあります。 ```ContentsTableSeeder public function run() { $user = User::find(1); for($i=1 ; $i<=5 ; $i++) { DB::table('contents')->insert([ 'title'=>'初めての海外旅行', 'user_id' => $user->id, 'content'=>'本当に楽しかった。', 'continent'=>'アジア', 'country'=>'中国・韓国・台湾', 'span'=>'15', 'costs'=>'200000', 'picture'=>'写真がいっぱい'.$i ]); } } ``` なぜこのエラーが出てしまうのかさっぱりでどう対処したらいいのか分からず困っています。少しでもご教示いただけると幸いです。
hayato7

2020/07/06 08:47

useは記述していますか?
kuwabaraakinori

2020/07/06 09:19

知識不足ですいません。use App\Userのことでしょうか?
hayato7

2020/07/06 09:35

Userクラスの、名前空間が、以下のように設定してあれば、 namespace App; ContentsTableSeederに以下のような記述があれば、その点に関しては問題ないはずです。 ``` <?php use Illuminate\Database\Seeder; use App\User; class ContentsTableSeeder extends Seeder { 以下略 ```
kuwabaraakinori

2020/07/06 09:58

返信ありがとうございます。 上記のように訂正したら正常に動きました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問