2016-06-16 4 views
0

私は2つのエンティティ:UserSkillを持っています。Symfony 2:条件に関係を追加/更新するそうでなければそれを削除する

これらは多対多の関係でリンクされています。 この関係UserSkillには、ratingのような追加情報が含まれています。この評価は、0から10

に行く私は評価は、私は評価は私が0

  • たい新しい関係を保存しない0

    • ある任意の関係を持っている必要はありません。

      $expertisesRatings = $entity->getUserSkillsRatings(); 
      foreach($skillRatings as $skillRating) { 
          $rate = $skillRating->getRating(); 
          if ($rate < 1) { 
           $user->removeUserSkill($skillRating); 
           $skillRating->setTalent(null); 
          } 
      } 
      
      :更新された評価は、私はこのコードを含むprePersistし​​、更新前イベントを作成しましたが、それは動作しません0

    になったときにリレーションを削除

    何もしません。 私はpreUpdateイベントでリレーションを操作することができないので、onFlushやonPreFlushを使用する必要があるのか​​、まったく別のアプローチを使用する必要があるのだろうと思っています。

    私は十分な詳細を与えたかったです。 ありがとうございます。

  • +0

    あなたは 'rating'のセッターでそれを直接扱うことができます。あなたが正しく述べたように、 'prePersist'を待つことは、実際には遅れることです。 –

    +0

    onFlushリスナーは正常に動作し、良いアプローチだと思います。 – Richard

    答えて

    0

    あなたはこの教義のイベントリスナーを使用して行うことができますエンティティ自身が自分自身を削除/変更する必要がないので、それはあなたがより高度なものを行うことを可能にするリスナークラスでhttp://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html

    を。

    リスナーはサービスなので、必要なサービスを注入できます。

    関連する問題