2017-08-04 2 views
1

データベースのマッピングにSymfonyとDoctrineを使用して、2つのエンティティ「Product」と「Operation」がManyToManyリレーションを持つため、DataBaseの「Products-Operations」という別のテーブルを取得します
Now私はこのテーブルの属性を追加するのが好きです、どうすればいいですか?アソシエーションクラスに属性を追加ManyToMany

Produit.orm.yml

manyToMany: 
    operations: 
     targetEntity: Operation 
     mappedBy: produits 

Operation.orm.yml私は私が思う同じorm.ymlと希望をデータベース内のテーブルを作成するために、注釈と協力

manyToMany: 
    produits: 
     targetEntity: Produit 
     inversedBy: operations 
     joinTable: 
      name: produits_operations 
      joinColumns: 
       operation_id: 
        referencedColumnName: id 
      inverseJoinColumns: 
       produit_id: 
        referencedColumnName: id 
+0

そのm:nテーブルに行を追加することを再検討したいかもしれません。 Doctrineでそのテーブルをどのように使用するかを見てみると(http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#many-to-many-単方向)、Entityが接続されていないことがわかります。したがって、このプロパティは本当にアクセス可能ではありません。一方、エンティティを作成したい場合は、3つのエンティティ間の関連付けをモデリングするのが変です。代わりに、エンティティがエンティティの1つに接続されるべきでないかどうかを考えてみてください。 – dbrumann

+0

このような状況にある場合、2つのモデルの間に抽象概念がないことがよくあります。純粋な多対多の関係はあまり一般的ではありません。 dbrumannのように、 'link'テーブルにいくつかのプロパティが必要な場合は、3番目のエンティティが必要です – RVandersteen

+0

答えをありがとう、新しいエンティティを追加すると、これらの3つのエンティティの関係はどうなりますか? –

答えて

1

このソリューションは仕事です...

//inverse side 
class Product 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="ProductOperation", mappedBy="product", cascade={"persist", "remove"}) 
    */ 
    private $productOperations; 
} 
//owing side 
class ProductOperation 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="Product", inversedBy="productOperations") 
    */ 
    private $product; 
    /** 
    * @ORM\ManyToOne(targetEntity="Operation", inversedBy="productOperations") 
    */ 
    private $operation; 

    } 
//inverse side 
class Operation 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="ProductOperation", mappedBy="operation", cascade={"persist", "remove"}) 
    */ 
    private $productOperations; 
} 
+0

はいこれが解決策です。私はこれを試してみました。それはうまく動作します。@Farshad –

+0

@DhiaEddineFarahようこそ –

関連する問題