簡単な記事投稿サイトを作成しているとタイトルの通り以下のエラーに遭いました。
SQLSTATE[HY000]: General error: 1364 Field '〇〇' doesn't have a default value
すごくシンプルなミスだったのですが、原因はカラム登録のための実装が抜けていたことです。
原因がシンプルなので解決策はカラム登録の実装をすれば良いだけです。
それでは解説していきます。
エラーの原因と解決策
エラーの原因はシンプルに私が勘違いしていたことにあります。
usersテーブルとarticlesテーブルを紐づけるuser_idカラムを追加したのですが、「外部キーは自動で作成される」と思っていました。
ネットで拾った外部キー作成に関する記事を見ながら実装し、特にモデルやコントローラーへコードを追記する説明がなかったので、「自動で作成されるのかな?」と思い込んでしまいました。
解決策は以下のようにモデルとコントローラーに追記するだけで終了です。
public function register(ArticleRequest $request)
{
$user = Auth::user();
$article = Article::create([
'title' => $request->title,
'body' => $request->body,
+ 'user_id' => $user->id, //追加
]);
return redirect()->route('articles.index')
->with('staus', '投稿が完了しました。');
}
//略
class Article extends Model
{
use HasFactory, SoftDeletes;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'title',
'body',
+ 'user_id', //追加
];
public function user()
{
return $this->belongsTo('App\Models\User');
}
}
これだけで今回の問題は解決です!
まとめ
今回はエラーメッセージが明確だったためすぐに解決することができました。
そもそも「外部キーは自動で作成される」という勘違いをしたことが全ての始まりです。(なんでそんな風に思ったのだろう(笑))
似たようなエラーが出た人はカラムの実装を見直してみてください!