問題
-
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などで保護するのを忘れないようにしよう!!