2017-11-10 14 views
0

Me:これは雑多な質問です。 訪問者:(何?)これはどういう意味ですか?DB :: transaction()はEloquentクエリをトランザクションとして実行できますか?

私が使用して(それが密結合として)1に

を2つの質問を求めている:Laravel 5.5 & Mysqlの

1.どのように私は雄弁に関連したモデルを削除しますか?私は次のような関係を有しているUserを削除しようとしている

belongsToのAddress、 belongsToのPackage、 hasManyのOrders、 hasManyのComments

OrdersUserProductCOmmentsカスケードときに削除されるカスケードUserまたはPostが削除されます。

は今どのように私はUser &を削除することができます自動的に削除orders & commentsが関連付けられていますか?

私は$user->delete() laravelを削除しようとする例外をスロー:

SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`cybertron`.`comments`, CONSTRAINT `comments_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)) (SQL: delete from `users` where `id` = 4) 

だから私は必ずすべてが削除されるようにするには、削除するためにトランザクションを使用するユーザーを決定し、関連する受注&コメント、 。

しかし、私は雄弁ではなくクエリビルダ(DB)でトランザクションを見つけました。

2.私はDB &からの取引を使用して、ユーザー($user->delete)を削除する雄弁を使用しますが、これはトランザクションとして考えられますか?

のような:

DB::transaction(function() { 

     $user->comments->delete(); 
     $user->orders->delete(); 
     $user->delete(); 
}); 

、その後どのように私は雄弁との取引を持つことができない場合は?

public function delete() 
{ 
    \DB::transaction(function() { 
     $this->comments()->delete(); 
     $this->orders()->delete(); 
     parent::delete(); 
    }); 
} 
  • はい、雄弁は、トランザクション自体を持っていません。

    すべてのヘルプは非常にあなたが削除する場合Eloquent eventsを持っていますが、あなたもそうのようなメソッドを削除し、デフォルトを上書きすることができ

  • 答えて

    0
    1. を理解されるであろう。表示したとおりにトランザクションを使用し、Eloquentまたはクエリービルダをラップします。あなたのケースであなたの代わりにcommentsorders

    +0

    comments()orders()を使用する必要があることに注意してください、私は実際に時間の検索&テストを過ごした後、その夜それを考え出し、答えをいただき、ありがとうございます。 あなたの答えは絶対にこの場合の解決策になるはずです。 – APu

    +0

    そしてこの場合、私たちはコレクションを扱っているのではなく、モデルが正しいので、 'comments'の代わりに' comments() 'を使うべきですか? – APu

    +0

    はい、これはリレーションシップを使用しているため、リレーションシップアイテムを削除したい場合に追加する必要があります –

    関連する問題