概要
- モデルクラスを用いてfindしたらエラーが発生したので解決方法をまとめる。
エラー発生までの経緯
-
下記のような記載をコントローラーの関数内に記載した。
FooController.phpuse App\Models\Content; $contentEloquent = Content::find($request->contentId);
-
当該のモデルクラスは下記のように記載した。
app/Models/Content.php<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Content extends Model { use HasFactory; use SoftDeletes; protected $fillable = [ 'id', 'content', ]; }
-
当該のマイグレーションは下記のように記載した。
create_contents_table.php<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('contents', function (Blueprint $table) { $table->id(); $table->string('content', 255)->comment('投稿内容'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('contents'); } };
エラー
-
findの処理が実行される部分に差し掛かった時、下記のエラーが発生した。
Illuminate\Database\QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'contents.deleted_at' in 'where clause' (SQL: select * from `contents` where `contents`.`id` = 7 and `contents`.`deleted_at` is null limit 1)'
エラー解消までの経緯
-
マイグレーションに論理削除系カラムの作成命令を記載していなかった。。(モデルクラスには記載していたのに。。)
-
下記のようにマイグレーションを修正したところエラーは解消した。
create_contents_table.php<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('contents', function (Blueprint $table) { $table->id(); $table->string('content', 255)->comment('投稿内容'); $table->timestamps(); $table->softDeletes(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('contents'); } };