2017-06-07 14 views
0

私はYMLマッピングでDoctrineを使用しています。私は2つの実体を持っている。 1つのGroupエンティティと1つのUserエンティティです。Doctrine - コンポジットキーでエンティティを永続化できません

私はそれを設定しようとしていますので、Userはグループ内で一意の名前を持っています。

Userを作成し、それにGroupを割り当てて、DBに保存することができます。しかし、同じ名前の別のGroupUserに作成しようとすると、nameの一意の制約に違反しているというエラーが表示されます。

なぜそれを維持できないのですかUser

彼らのマッピングは次のようになります。私は最終的にこれを考え出した

Entity\Group: 
    type: entity 
    table: groups 
    id: 
     id: 
      type: guid 
      nullable: false 
      id: true 
      generator: 
       strategy: AUTO 
    fields: 
     name: 
      type: text 
      nullable: true 

Entity\User: 
    type: entity 
    table: users 
    id: 
     group: 
      associationKey: true 
      nullable: false 
     name: 
      type: string 
    manyToOne: 
     Group: 
      targetEntity: Entity\Group 
      joinColumn: 
       name: group 
       referencedColumnName: id 

答えて

0

。私は教義を混乱させていた。

非標準的なことは、オブジェクトを表し、それをテーブルの列の小文字に変更するために大文字のパラメータ名を使用していたことでした。私はname:を使ってmanyToOne:セクションでこれを行いました。

ドキュメントでは実際にはこれが行われないため、id:セクションの大文字のプロパティ名を参照してそこに列名を別途定義しなければならないことはわかりませんでした。

Entity\User: 
    type: entity 
    table: users 
    id: 
     Group: 
      column: group 
      associationKey: true 
      nullable: false 
     name: 
      type: string 
    manyToOne: 
     Group: 
      targetEntity: Entity\Group 
      joinColumn: 
       name: group 
       referencedColumnName: id 

だから、私はこれにUserマッピングを変更しました

関連する問題