SQLSTATE[HY000]: General error: 1364 Field 'status' doesn't have a default value

Laravel8でQ&Aサイトを作りながら、CRUD機能の勉強をしています。
その中でタイトル通りのエラーが出てしまったので、その解決メモを残しておきます。

結論としては、Modelを編集し**statusカラムにデフォルト値を設定することで**解決に至りました。

# やりたいこと

”質問” の ”投稿” を成功させたい！ 

QuestionController内のstoreでPOSTしようとしています。
下記の記述では、エラーとなってしまいました。

app/Http/Controllers/QuestionController.php

```php
public function store(CreateQuestion $request)
    {
	　　　　// フォームからのリクエストを全て受け取りcreateしている
        Question::create($request->all());

        return redirect()->route('questions.index');
    }
```

questionsテーブル

```php
+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| id         | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| title      | varchar(255)        | NO   |     | NULL    |                |
| content    | text                | NO   |     | NULL    |                |
| status     | int(11)             | NO   |     | NULL    |                |
| created_at | timestamp           | YES  |     | NULL    |                |
| updated_at | timestamp           | YES  |     | NULL    |                |
+------------+---------------------+------+-----+---------+----------------+
```

# エラー

```php
SQLSTATE[HY000]: General error: 1364 Field 'status' doesn't have a default value (SQL: insert into `questions` (`title`, `content`, `updated_at`, `created_at`)  values (てす, てすてす, 2021-11-16 13:33:51, 2021-11-16 13:33:51))
```

「statusカラムが値を持っていない」とのこと。


# 原因

**statusカラムに何も値を入れていない為**エラーとなっていました。

Controllerは`Question::create($request->all());`としていました。
form画面においても、statusに関して入力するところを設けていませんでした。

resources/views/questions/create.blade.php

```php
<form  action="{{ route('questions.store') }}" method="post" class="pt-3">
                @csrf
                <div class="form-group">
					// titleフォーム
                    <label>タイトル</label>
                    <input type="text"  name="title" value="{{ old('title') }}" class="form-control" placeholder="質問タイトルを入力して下さい">
                </div>
                <div class="form-group">
					// contentフォーム
                    <label>内容</label>
                    <textarea class="form-control" rows="3" placeholder="質問内容を入力して下さい" name="content">{{ old('content') }}</textarea>
                </div>
                <div>
                    <button type="submit" class="btn btn-light">質問する</button>
                </div>
            </form>
```

このままではstatusカラムに何も値が入りません！

# 解決

[https://ken17yama.github.io/next-blog/posts/laravel_20200919](https://ken17yama.github.io/next-blog/posts/laravel_20200919)

こちらの記事を参考にさせていただきました！

Modelにデフォルト値を設定することで、解決しました！

app/Models/Question.php

```php
class Question extends Model
{
    use HasFactory;
		
	// 以下３行を追加
    protected $attributes = [
        'status' => 1,
    ];

    protected $fillable = ['title', 'content', 'status'];

    public function answers()
    {
        return $this->hasMany(Answer::class);
    }

    public function getFormattedCreatedAtAttribute()
    {
        return Carbon::parse($this->attributes['created_at'])->format('Y/m/d');
    }
}
```

ステータス（質問が未回答or未解決or解決）についてはまだ実装していませんが、質問をPOSTした時点では１（未回答）とする想定です。
POSTされた時点では未解決なはずなので、デフォルト値はユーザーが設定しなくていいと思います。