実現したいこと
親テーブルのレコードを削除した際に、紐づく子テーブルのレコードも自動削除したい。
該当のソースコード
Post Model(親)
php
1class CreatePostsTable extends Migration 2{ 3 public function up() 4 { 5 Schema::create('Posts', function (Blueprint $table) { 6 $table->bigIncrements('id'); 7 $table->string('name'); 8 $table->timestamps(); 9 $table->softDeletes(); 10 } 11 } 12}
php
1class Post extends Model 2{ 3 use SoftDeletes; // 論理削除 4 5 public function users() 6 { 7 return $this->hasMany('App\User'); 8 } 9}
User Model(子)
php
1class CreateUsersTable extends Migration 2{ 3 public function up() 4 { 5 Schema::create('users', function (Blueprint $table) { 6 $table->bigIncrements('id'); 7 $table->unsignedBigInteger('post_id'); 8 $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade'); 9 $table->string('name'); 10 $table->timestamps(); 11 } 12 } 13}
php
1class User extends Model 2{ 3 // 物理削除 4 5 public function post() 6 { 7 return $this->belongsTo('App\Post'); 8 } 9}
レコード削除処理
php
1class PostController extends Controller 2{ 3 public function destroy(Post $post) 4 { 5 $post->delete(); // 親テーブルの指定レコードの削除 6 } 7}
発生した問題
削除対象の親テーブルのレコードに紐づく子テーブルのレコードは物理削除されない
試したこと
Post Model(親)
php
1class Post extends Model 2{ 3 use SoftDeletes; // 論理削除 4 5 public function users() 6 { 7 return $this->hasMany('App\User'); 8 } 9 10 /* 下記を追加 */ 11 protected static function boot() 12 { 13 parent::boot(); 14 self::deleting(function ($post) { 15 $post->users()->delete(); 16 }); 17 } 18}
上記により削除されるようになりましたが、
「外部キー制約の設定さえすれば親テーブルの削除処理実行のみで紐づく子テーブルのレコードも自動削除される」と思っておりました。
私の認識が間違っていますでしょうか?
補足情報
Laravel 6.8
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/26 08:43
2020/06/29 04:06