環境
- MacOS MonteMonterey 12.0
- SQlite 3.12.2
- Laravel 6
解決したいエラー内容
Illuminate\Database\QueryException
SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: woods.size (SQL: insert into "woods" ("id") values (1))
個人的な考察と経緯
マイグレーションを作成した際に自動で生成されるIDを使用していましたが、今回、親テーブルのような扱いをするItemsテーブルのIDを使用したくカラム属性をbigIncrementsをbigIntegerに変更しました。
上記変更が根源と思い、対応策を探しましたが最適な解答が見つけることができず、質問させていただきました。
関連ファイル
マイグレーションファイル
usersはLaravel既存の物を使用しています。
create_items_table
php
1<?php 2 3use Illuminate\Database\Migrations\Migration; 4use Illuminate\Database\Schema\Blueprint; 5use Illuminate\Support\Facades\Schema; 6 7class CreateItemsTable extends Migration 8{ 9 public function up() 10 { 11 Schema::create('items', function (Blueprint $table) { 12 $table->bigIncrements('id'); 13 $table->string('brand', 100)->nullable(); 14 $table->integer('year')->unsigned()->nullable(false)->length(4); 15 $table->integer('user_id')->unsigned()->nullable(); 16 17 $table->timestamps(); 18 19 $table->foreign('user_id')->references('id')->on('users'); 20 21 }); 22 } 23 24 public function down() 25 { 26 Schema::dropIfExists('items'); 27 } 28} 29
create_woods_table
php
1<?php 2 3use Illuminate\Database\Migrations\Migration; 4use Illuminate\Database\Schema\Blueprint; 5use Illuminate\Support\Facades\Schema; 6 7class CreateWoodsTable extends Migration 8{ 9 10 public function up() 11 { 12 Schema::create('woods', function (Blueprint $table) { 13 $table->bigInteger('id')->unsigned()->nullable(false); 14 $table->integer('size')->nullable(false)->length(3)->unsigned(); 15 16 $table->foreign('id')->references('id')->on('items'); 17 }); 18 } 19 20 public function down() 21 { 22 Schema::dropIfExists('woods'); 23 } 24} 25
モデルファイル
Item.php
php
1<?php 2 3namespace App\Model; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Item extends Model 8{ 9 protected $guarded = ['id','created_at','updated_at']; 10 11 Public function wood() 12 { 13 return $this->hasOne('App\Wood'); 14 } 15} 16
Wood.php
php
1<?php 2 3namespace App\Model; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Wood extends Model 8{ 9 protected $fillable = ['id']; 10 11 public $timestamps = false; 12 13 Public function item() 14 { 15 return $this->belongsTo('App\Item'); 16 } 17} 18
コントローラー
php
1<?php 2 3namespace App\Http\Controllers; 4 5use App\Model\Item; 6use App\Model\Wood; 7use Illuminate\Http\Request; 8 9use Illuminate\Support\Facades\DB; 10 11 12class ItemController extends Controller 13{ 14 15~~~ 16 17 public function store(Request $request) 18 { 19 $item = [ 20 'brand' => $request->brand, 21 'year' => $request->year, 22 'user_id' => $request->user_id 23 ]; 24 25 $inputs = $request->all(); 26 27 DB::beginTransaction(); 28 29 try{ 30 //↓問題なし 31 $created_item = Item::create($item); 32 $inputs['id'] = $created_item->id; 33 34 $detail = [ 35 'size' => $request->size, 36 'id' => $created_item->id 37 ]; 38 39 // dd($inputs); 40 41 // dd($detail); 下記に内容を記載 42 43 Wood::create($detail); 44 45 /* こちらもNG 46 Wood::create([ 47 'size' => $request->size, 48 'id' => $created_item->id, 49 'tall_min' => $request->tall_min, 50 'tall_max' => $request->tall_max 51 ]); 52 */ 53 54 DB::commit(); 55 } catch(Throwable $e){ 56 DB::rollback(); 57 } 58 59 return redirect()->route('item.index')->with('message', 'Item created successfully.'); 60 } 61}
$detailの内容
array:2 [▼ "size" => "140" "id" => 1 ]
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/20 12:50