1

User has-many Post has-many の3 つのモデルがありCommentます。ユーザーを削除すると、関連するすべての投稿と、これらの投稿に関連するコメントが自動的に削除されます。これを達成するために、モデルUserPostモデルに次のコードがあります。

// User
protected static function boot() {
    parent::boot();

    static::deleting(function($user) {
        $user->posts()->delete();
    });
}

// Post
protected static function boot() {
    parent::boot();

    static::deleting(function($post) {
        $post->comments()->delete();
    });
}

ユーザーを削除すると、そのユーザーの投稿はすべて削除されますが、コメントは保持されます。なぜこうなった?

4

2 に答える 2

1

これを実現するためにデータベース スキーマを使用するとより効果的です。それはより速く、「最大関数ネストレベル」のエラーはありません

public function up()
{
    Schema::create('comments', function(Blueprint $table)
    {
        $table->increments('id');
        $table->integer('post_id');
        $table->string('comment');
    });

    Schema::table('comments', function(Blueprint $table){
        $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
    });
}
于 2016-06-03T20:49:02.993 に答える
1

次にやろうとしたことはありますか?

// User
protected static function boot() {
    parent::boot();

    static::deleting(function($user) {
        foreach ($user->posts() as $post)
        {
            $post->comments()->delete();
        }            
        $user->posts()->delete();

    });

ところで、これはカスケード削除のデータベーススキーマにある必要があり、子を削除するためのモデルコードは必要ありません。

于 2016-06-03T17:00:36.390 に答える