学说2:无法正确设置OneTo许多关系

时间:2013-03-21 11:09:40

标签: php join doctrine-orm codeigniter-2

我有2个实体:面试和评论。面试与评论有一对多的单向关系。

这是我的评论的yaml映射文件:

Entities\Comment:
  type: entity
  table: Comment
  repositoryClass: Repositories\CommentRepository

  fields:
    id:
      type: integer
      id: true
      generator:
        strategy: AUTO
    parentid:
      type: integer
      nullable: false
      column: parentid
    isactive:
      type: integer
      nullable: false
      column: isactive
    isremoved:
      type: integer
      nullable: false
      column: isremoved
    removaldate:
      type: datetime
      nullable: true
      column: removaldate
    user_name:
      type: string
      length: 255
      nullable: false
      column: user_name
    user_email:
      type: string
      length: 255
      nullable: false
      column: user_email
    user_avatar:
      type: string
      length: 255
      nullable: false
      column: user_avatar
    comment:
      type: text
      nullable: false
      column: comment
    creationdate:
      type: datetime
      nullable: false
      column: creationdate
    rating:
      type: integer
      nullable: false

这是我面试的yaml映射文件:

Entities\Interview:
  type: entity
  table: Interview
  repositoryClass: Repositories\InterviewRepository

  fields:
    id:
      type: integer
      id: true
      generator:
        strategy: AUTO
    isremoved:
      type: integer
      nullable: false
      column: isremoved
    removaldate:
      type: datetime
      nullable: true
      column: removaldate
    creationdate:
      type: datetime
      nullable: false
      column: creationdate
    rating:
      type: integer
      nullable: false
    anonstitle:
      type: string
      length: 1000
      nullable: false
      column: anonstitle
    anons:
      type: text
      nullable: false
      column: anons
    anonsphoto:
      type: string
      length: 255
      nullable: true
      column: anonsphoto
    interviewtitle:
      type: string
      length: 1000
      nullable: false
      column: interviewtitle
    interview:
      type: text
      nullable: true
      column: interview
    interviewphoto:
      type: string
      length: 255
      nullable: true
      column: interviewphoto
  manyToMany:
    comments:
      targetEntity: Comment
      joinTable:
        name: interviews_comments
        joinColumns:
          interview_id:
            referencedColumnName: id
        inverseJoinColumns:
          comment_id:
            referencedColumnName: id
            unique: true

所以在将模式加载到数据库之后,我有3个表。其中2个是实体表,一个是关系表,它只有2列:interview_id,comment_id。但是在为一些采访持久化评论对象后,我在连接表中看不到任何内容。无法找出原因。

1 个答案:

答案 0 :(得分:0)

  

采访与评论有一对多的单向关系。

不,因为您在manyToMany中将此关系定义为Entities\Interview,而不是在拥有方的单向oneToMany

ManyToMany映射重新连接表。因为一个Interview可以有多个Comment,一个Comment可以有多个Interview。使用数据库表中的其他属性无法解决此问题,因此会创建其他映射表。

<强>解决方案: 如果您希望一个Interview包含多个Comment,但一个Comment只有一个Interview,则必须更正yaml Entities\Interview中的映射到{ {1}}没有oneToMany(正如您定义的那样,并且已创建)。