2017-08-23 2 views
1

J'essaie de créer une relation ManyToMany avec doctrine (dans symfony) qui dépend d'une valeur de champ.Doctrine ManyToMany avec une valeur de champ spécifique

/** 
* @ORM\ManyToMany(targetEntity="Label") 
* @ORM\JoinTable(
*  name="Item_Label", 
*  joinColumns={@ORM\JoinColumn(name="item_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="label_id", referencedColumnName="id")} 
*) 
*/ 
private $labels; 

nous comprenons ici que nous devons obtenir des données de Label via la table Item_label

Nous sommes sur la table Wine

Wine.id <-> Item_Label.item_id

  <<< `WHERE Item_Label.item_type = 'wine'` >>> 
            `Item_Label.label_id` <-> `Label.id` 

Alors, comment puis-je écrire le WHERE Item_Label.item_type = 'wine' dans les annotations? Ou un SqlFilter (j'ai essayé mais échoué)?

Merci pour votre aide =)

+0

Fournir vos définitions d'entité pour autant que je comprends dans la relation 'ManyToMany' la table de jonction AKA table de jonction' (Item_Label) 'aura seulement 2 champs qui contiendront la référence de deux entités connexes aucun autre champ ne doit être ajouté dans cette table de jonction pour ce faire vous devez créer une entité de jonction –

Répondre

0

Ainsi, il semble que de this SO answer il est impossible dans la doctrine.

Ma solution était d'ajouter une méthode à ma classe d'entités comme suit

public function foo($itemLabelRepo)        
{                   
    $found = $itemLabelRepo->findBy(['item_type'=>'wine', 'label_id'=>$this->getId()]); 
    if(count($found)!=1) {             
     throw new \Exception("Found non-one object from entity role");  
    } 
    return $found[0];              
} 

où itemLabelRepo $ serait le dépôt de « ITEM_LABEL » dans votre cas