createでdefault valueが無いことになっているエラー
今日紹介するエラーコードはこれ!!!!
Illuminate\Database\QueryException
SQLSTATE[HY000]: General error: 1364 Field 'author' doesn't have a default value (SQL: insert into `articles` (`updated_at`, `created_at`) values (2021-06-28 05:58:16, 2021-06-28 05:58:16))
見ての通りレコードを作成するときにdefaultカラムが設定されていないカラムに何も値を入れないでcreateを行ったりするとできます。
普通は。
今日はそんなエラーコードに何故かハマって2時間くらい無駄にしたので備忘録も兼ねて書きます。
僕の書いたコードはこれ↓
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use App\Models\Category;
class Article extends Model
{
use HasFactory;
private $md_categories;
public function __construct()
{
$this->md_categories = new Category;
}
protected $fillable = ['author','tittle','date','content','category_id','is_valid'];
public function store($datas){
//カテゴリーがすでに存在するか?
if(DB::table('categories')->where('category_name', $datas['category'])->exists()){
$category=DB::table('categories')->where('category_name', $datas['category'])->first();
$category_id=$category->id;
}else{
$category_id=$this->md_categories->create_category($datas['category']);
}
//dd($datas['author']);
Article::create([
'author' => $datas['author'],
'tittle' => $datas['tittle'],
'date' => $datas['date'],
'content' => $datas['content'],
'category_id' => $category_id,
'is_valid' => '1',
]);
}
}
そしたら下記のエラーがでました。
Illuminate\Database\QueryException
SQLSTATE[HY000]: General error: 1364 Field 'author' doesn't have a default value (SQL: insert into `articles` (`updated_at`, `created_at`) values (2021-06-28 05:58:16, 2021-06-28 05:58:16))
authorにdefault valueがないと言っているがcreateの部分では'author' => $datas['author']で値をセットしておりddで中身が入っていることも確認した。
じゃあなぜ…
結論
コンストラクタのせいだった
コンストラクタがあるとcreateでインスタンスを呼び出した際にもコンストラクタが呼び出され値が初期化されるらしい。
詳しいことは要検証
取り敢えずコンストラクタを消して一旦解決
Author And Source
この問題について(createでdefault valueが無いことになっているエラー), 我々は、より多くの情報をここで見つけました https://qiita.com/wwwesk/items/b06bf753885122dd61a8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .