問題
-
Laravel
でcreate
を実行したが、値を指定したのに挿入される値はNULL
になっていた。 -
Laravel
でcreate
を実行した際、**SQLSTATE[HY000]: General error: 1364 Field (カラム名) doesn't have a default value
**が発生した。
解決策
モデルを見直す
自分の場合、モデルで該当のカラムを$fillable
の対象に記入していなかった。
app\Model.php
class Model extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
//(ここにcreateを実行してもNULLになってしまっていたカラムを指定する)
];
原因
Laravel
では、モデルを通してcreate
などを利用しデータベースにレコードなどを保存する際、悪意あるユーザーが勝手にカラムなどを作成し、その人が実質上の管理者とならないように管理者を保護する機能が標準で備わっている。
そのため、$fillable
などでcreate
で作成、挿入する対象のカラムを指定しないと、Laravel
が悪意あるユーザーかもしれないと思ってしまい、自動でNULL
を入れて保護してしまうことが原因だった。
create
などでデフォルトの値を設定していないカラムは、$fillable
などで保護するのを忘れないようにしよう!!