2017-02-09 8 views
0

1対多接続の2つのモデルがあります。たとえば、User ans UserCommentモデルとしましょう。私がUser::destroyメソッドを呼び出すときには、のインスタンスをuser_idのフィールドが、Useridに等しい値で破棄したいと考えています。私は単にUser::destroyメソッドをオーバーロードすることがありますが、これを達成するためのより良い方法があるのだろうかと思います。Laravelのすべての依存関係を持つモデルインスタンスを破棄します

答えて

1

はい、移行によって移行するのが最善の方法です(より効率的です)。 UserUserCommentという小さな例を考えてみましょう。ユーザーの移行はそのままです。 UserCommentの場合:

Schema::create('usercomments', function(Blueprint $table){ 
    $table->integer('user_id')->unsigned(); 
    .... 

    $table->foreign('user_id', 'fk_user_id') 
    ->references('id') 
    ->on('users') 
    ->onDelete('cascade') 
    ->onUpdate('cascade'); //not needed in your case. 
}); 

[OK]を私は長い間使用していないので、構文をオンラインでチェックすることがあります。しかし、それはその要点です。

ユーザーを削除すると、彼のコメントはすべてDBによって自動的に削除されます。

Goodluck mate!

+0

私は移行は、MySQLのストアドプロシージャを設定することができる右のことを理解していますか?これは驚くように見えます!私はそれをチェックします、ありがとう。 –

+0

Googleでこれについて語った。これはストアドプロシージャではなく、MySQLの外部キー実装です。とにかく、私のSQL知識のギャップを記入していただきありがとうございます。 –

1

これは(上記のEddyTheDoveで提案したように)データベースを使用しますが、このためにデータベースを使用したくない場合は、ユーザーモデルの削除イベントに何かを追加できます。

例:

protected static function boot() { 
    parent::boot(); 
    static::deleting(function($user) { 
     $user->user_comments()->delete(); 
    }); 
} 
関連する問題