質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

1回答

1764閲覧

laravel で空値の入力をデータベースに登録しようとするとエラーになる

kokok

総合スコア145

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2020/03/17 08:48

php

1//create_user.blade.php 2 3<!DOCTYPE html> 4<html lang="ja"> 5 <head> 6 <meta charset="utf-8"> 7 <link rel="stylesheet" href="/css/style.css"> 8 <title>新規ユーザ作成ページ</title> 9 </head> 10 <body> 11 <h1>ユーザの作成</h1> 12<form class="" action="{{url('/create_user_page')}}" method="post"> 13{{ csrf_field()}}`create_user.blade.php 14 15<p class="interval"> 16 <label for="name">ニックネーム:</label> 17 <input type="text" name="user_name" id="name" 18 value="{{ old('user_name') }}"> 19</p> 20<p class="note">5文字以上で入力してください</p> 21@if ($errors->has('user_name')) 22<span class="error"> {{ $errors->first('user_name') }} 23</span> 24@endif 25 26<p class="interval"> 27 <label for="pass">パスワード:</label> 28 <input type="password" name="password" id="pass"> 29</p> 30<p class="note">8文字以上で入力してください</p> 31@if ($errors->has('password')) 32<span class="error"> {{ $errors->first('password') }} 33</span> 34@endif 35 36<p class="interval"> 37 <label for="pass2">再入力パスワード:</label> 38 <input type="password" name="password2" id="pass2"> 39</p> 40@if ($errors->has('password2')) 41<span class="error"> {{ $errors->first('password2') }} 42</span> 43@endif 44<p class="interval"> 45 <label for="profile">プロフィール<br>(自己紹介):</label> 46 47 <textarea name="profile" id="profile" rows="8" cols="80" >{{ old('profile') }}</textarea> 48</p> 49 50<button type="submit" name="button">ユーザ作成</button> 51 52</form> 53<form action="{{url('login')}}" method="get"> 54<button type="submit" name="button">戻る</button> 55</form> 56<script src="/js/main.js"></script> 57 58</script> 59 </body> 60</html> 61 62

php

1UserRequest.php 2<?php 3 4namespace App\Http\Requests; 5 6use Illuminate\Foundation\Http\FormRequest; 7 8class UserRequest extends FormRequest 9{ 10 /** 11 * Determine if the user is authorized to make this request. 12 * 13 * @return bool 14 */ 15 public function authorize() 16 { 17 return true; 18 } 19 20 /** 21 * Get the validation rules that apply to the request. 22 * 23 * @return array 24 */ 25 public function rules() 26 { 27 return [ 28 // 29 30 31 'user_name' => 'required|min:5', 32 'password' => 'required|min:8', 33 'password2' => 'required|min:8| same:password' 34 35 ]; 36 } 37 38 public function messages(){ 39 40 return [ 41 'user_name.required' => 'ニックネームを入力してください', 42 'user_name.min' => 'ニックネームを5文字以上で入力してください', 43 'password.required' => 'パスワードを入力してください', 44 'password.min' => 'パスワードを8文字以上で入力してください' 45 , 46 'password2.required' => '再パスワードを入力してください', 47 'password2.same' => 'パスワードが一致しません' 48 ]; 49 } 50} 51

php

1 2//マイグレーション 3<?php 4 5use Illuminate\Database\Migrations\Migration; 6use Illuminate\Database\Schema\Blueprint; 7use Illuminate\Support\Facades\Schema; 8 9class CreateUsersTable extends Migration 10{ 11 /** 12 * Run the migrations. 13 * 14 * @return void 15 */ 16 public function up() 17 { 18 Schema::create('users', function (Blueprint $table) { 19 $table->id(); 20 $table->text('user_name'); 21 $table->text('password'); 22 $table->text('profile')->nullable(); 23 24 $table->timestamps(); 25 }); 26 } 27 28 /** 29 * Reverse the migrations. 30 * 31 * @return void 32 */ 33 public function down() 34 { 35 Schema::dropIfExists('users'); 36 } 37} 38 39

php

1 2User.php 3 4<?php 5 6namespace App; 7 8use Illuminate\Database\Eloquent\Model; 9 10class User extends Model 11{ 12 // 13 protected $fillable = ['user_name', 'password', 'profile']; 14} 15 16

UserController.php

1 2<?php 3 4namespace App\Http\Controllers; 5 6use Illuminate\Http\Request; 7use App\User; 8use App\Http\Requests\UserRequest; 9 10 11 12 13 14class UserController extends Controller 15 16{ 17 // 18 public function create(){ 19 20 return view('user.create_user'); 21 } 22 23 24 public function create_user(UserRequest $request){ 25 26 $user = new User(); 27 $user->user_name = $request->user_name; 28 29 $user->password = $request->password; 30 <?php 31 32namespace App; 33 34use Illuminate\Database\Eloquent\Model; 35 36class User extends Model 37{ 38 // 39 protected $fillable = ['user_name', 'password', 'profile']; 40} 41 $user->profile = $request->profile; 42$user->save(); 43return redirect('/login'); 44 45 } 46 47 48} 49 50

入力フォームから何を入力されずに、送信されたてきたデータをデータベースに登録しようとすると

SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: users.profile (SQL: insert into "users" ("user_name", "password", "profile", "updated_at", "created_at") values (sasasa, aaaaaaaa, ?, 2020-03-17 17:20:56, 2020-03-17 17:20:56))

とエラーが出てしまいます。

$table->text('profile')->nullable();

のように指定しても

SQLSTATE [23000]:整合性制約違反:19 NOT NULL制約が失敗しました:

などとなってしまいます。

原因がなかなか理解できなかたのでアドバイスいただけると幸いです。

Laravel Framework 7.1.3
sqlite 3.28.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

$table->text('profile')->nullable();

上記コードを追記後に、データベースは作成し直したでしょうか。

マイグレーションファイルの変更がデータベースに反映されていないのではないかと思います。

データベースのデータが消えても問題ない場合は下記コマンドを実行し、

データベースを作成し直してみてはいかがでしょうか。

php artisan migrate:fresh

投稿2020/03/17 09:59

編集2020/03/17 10:01
3YearsOnAStone

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kokok

2020/03/17 10:20

回答ありがとうございます。 マイグレーションファイルの変更がデータベースに反映されていなかったみたいです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問