たかブログ

webを勉強しています。

laravel テーブルの設定変更をする DBエラー SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'hogehoge'  compoerでdbalについて

エラー内容: notnullでnull制約がされている 空は許可しないという設定になっている


                                                                                                                                                            • +
Field Type Null Key Default Extra
                                                                                                                                                            • +
id bigint(20) unsigned NO PRI NULL auto_increment
title varchar(255) NO NULL
category_name varchar(255) NO NULL
problem0 varchar(255) NO NULL
problem1 varchar(255) NO NULL


やりたいこと:空の値でも入れるという設定にしたかった。







対策: カラムの制限を変更する




1度作ったテーブルのカラムについて変更や各種制限を変更するのもマイグレーションを使う


カラムの変更はcomposer.jsonでdoctrine/dbalを追加する必要がある





Doctrine DBALライブラリというのは、現在のカラムの状態を決め指定されたカラムに対する修正を行う
ために使用している


composer requireで

compoerを通してinternet上からダウンロードすることができる
jsでいうnpm 
composer.jsonでライブラリが管理されている


qiita.com




これでdbalでカラムを修正するSQLを自動的に作るための準備ができた



まず、カラムを変更するためのマイグレーションファイルを作成




(テーブル設計をしたらそれを実行しないと始まらないので、その実行に当たるのがマイグレーション)




php artisan make:migration change_hogehoge_not_null_to_null_on_drills_table --table=drills


このような命名であれば、ファイル名から、何をしたいのか明示することができる



hogehogeカラムをchangeするnotNullからNullに変えるdrills_tableに対して


という意味



そのmigrationに対して、

$table->string('problem1')->nullable()->change(); で、 カラムの型指定してSQLを書き換えるための指定をすること



nullableについて
nullでも良いことにする
Laravelの標準バリデーションのわかりにくい挙動を実験して確かめたまとめ - Qiita