2012-07-06 59 views
1

我在執行orm時嘗試了這個錯誤:schema-tool:create。這是我第一次與Doctrinem合作,所以我有了一些疑問,我認爲 - 導致錯誤的是我有一個帶有3個Comment對象的類Player。我對DB計劃的想法是:名稱爲'ysdf.player_comment'的表已存在

player_comment(id_player,id_comment) 
commentsliked(id_player,id_comment) 
commentsdisliked(id_player,id_comment) 

注意,評論是一個雙向的關係,雖然commentsLiked和commentsDisliked都沒有。

據我瞭解,原則要命名前3代表「player_comment」。

在此先感謝。

我班球員是這樣的:

/** 
* @Entity @Table(name="players") 
*/ 
class Player 
{ 
/** 
* @Id @Column(type="integer") @GeneratedValue 
* @var int 
**/ 
private $id; 

/** 
    * @OneToMany(targetEntity="Comment", mappedBy="writer") 
* @var Comment[] 
    **/ 
private $comments = null; 
/** 
* @ManyToMany(targetEntity="Comment") 
    * @Table(name="commentsliked") 
* @var Comment[] 
**/ 
private $commentsLiked = null; 
/** 
* @ManyToMany(targetEntity="Comment") 
    * @Table(name="commentsdisliked") 
* @var Comment[] 
**/ 
private $commentDisliked = null; 
} 

我的類評論是這樣的:

/** 
* @Entity @Table(name="comments") 
*/ 
class Comment { 
/** 
* @Id @Column(type="integer") @GeneratedValue 
* @var int 
**/ 
private $id; 

/** 
    * @ManyToOne(targetEntity="Player", inversedBy="comments") 
* @var Player 
    **/ 
private $writer; 
} 

回答

0

我使用@JoinTable在http://docs.doctrine-project.org/en/latest/reference/association-mapping.html#many-to-many-unidirectional表示。

我更新commentsLiked和commentsDisliked的註釋:

/** 
* @ManyToMany(targetEntity="Comment") 
* @JoinTable(name="commentsliked", 
* joinColumns={@JoinColumn(name="player_id", referencedColumnName="id")}, 
* inverseJoinColumns={@JoinColumn(name="commment_id",referencedColumnName="id")}) 
* @var Coments[] 
**/ 
private $commentsLiked = null; 
/** 
* @ManyToMany(targetEntity="Comment") 
* @JoinTable(name="commentsDisliked", 
* joinColumns={@JoinColumn(name="player_id", referencedColumnName="id")}, 
* inverseJoinColumns={@JoinColumn(name="comment_id",referencedColumnName="id")}) ) 
* @var Comment[] 
**/ 
private $commentsDisliked = null; 
1

我是從連接表關聯類註釋中定義和衝突的多對多註釋定義的連接表得到這個問題。

具有直接ManytoMany關係的兩個實體中的映射定義似乎導致使用'joinTable'註釋自動創建連接表。然而,連接表已經由其基礎實體類中的註釋定義,並且我希望它使用此關聯實體類自己的字段定義,以便用其他自定義字段擴展連接表。

的解釋和解決方案多虧了這個帖子在論壇「Doctrine Annotation Question」。這篇文章提請注意關於ManyToMany Uni-directional relationships的Doctrine文檔。查看關於使用「關聯實體類」的方法的註釋,從而用主實體類中的一對多註釋和兩個「多對多」直接替換兩個主要實體類之間的多對多註釋映射關聯實體「類中的」一個「註釋。有在這個論壇上發帖Association models with extra fields提供了一個例子:

public class Person { 

    /** @OneToMany(targetEntity="AssignedItems", mappedBy="person") */ 
    private $assignedItems; 

} 

public class Items { 

    /** @OneToMany(targetEntity="AssignedItems", mappedBy="item") */ 
    private $assignedPeople; 
} 

public class AssignedItems { 

    /** @ManyToOne(targetEntity="Person") 
    * @JoinColumn(name="person_id", referencedColumnName="id") 
    */ 
private $person; 

    /** @ManyToOne(targetEntity="Item") 
    * @JoinColumn(name="item_id", referencedColumnName="id") 
    */ 
private $item; 

} 

參見Example of a Doctrine 2.x many-to-many association classDoctrine2: Best way to handle many-to-many with extra columns in reference table

+0

謝謝@Ben。所有與此類問題有關的答案以及您深入探討的類似問題,請參閱手冊並提供理解問題所需的所有必要信息。 – 2017-09-13 08:55:10

0

一種涼爽的解決方案是爲具有對ManyToMany相關聯的「可更新視圖」和使用真實的表用於矩陣實體。這樣,您將從兩種方法中受益。

相關問題