与两个不同表的单表关系

时间:2013-12-24 10:46:20

标签: php mysql sql symfony doctrine-orm

我的数据库架构:

LIKE      PAGE    ARTICLE    
id        id      id
userid    name    text    

我的问题 - 如何使用LIKE表在PAGE表和ARTICLE表之间建立关系? 通常:

Like.php:

/**
 * @ORM\ManyToMany(targetEntity="Page", inversedBy="likes")
 */
protected $pages;

/**
 * @ORM\ManyToMany(targetEntity="Article", inversedBy="likes")
 */
protected $articles;

page.php文件:

/**
 * @ORM\ManyToMany(targetEntity="Like", mappedBy="pages")
 * @ORM\JoinTable(name="like_page")
 */
protected $likes;

Article.php:

/**
 * @ORM\ManyToMany(targetEntity="Like", mappedBy="article")
 * @ORM\JoinTable(name="like_article")
 */
protected $likes;

但是,ID列在两个表(页面和文章)中都是相同的。不会实现。 我该怎么办?

3 个答案:

答案 0 :(得分:0)

如果我的模糊问题和架构正确,你真正想要的是:

likes (
  id,
  user_id,
  page_id,
  article_id
)
  • 喜欢有一个用户(作者),页面(来源)和文章(目标)
  • 用户,网页和文章有很多喜欢

答案 1 :(得分:0)

基本上,丹尼斯说。在这种模式中,您并不需要多对多的关系。一对多的关系就足够了。

Like.php:

/**
  * @ORM\ManyToOne(targetEntity="Page")
  * @ORM\JoinColumn(name="page_id", referencedColumnName="id")
 */
protected $page;

/**
  * @ORM\ManyToOne(targetEntity="Article")
  * @ORM\JoinColumn(name="article_id", referencedColumnName="id")
 */
protected $article;

page.php文件:

/**
 * @ORM\OneToMany(targetEntity="Like", mappedBy="page")
 */
protected $likes;

Article.php:

/**
 * @ORM\OneToMany(targetEntity="Like", mappedBy="article")
 */
protected $likes;

答案 2 :(得分:0)

您不需要Like.php实体。

你的“喜欢”是一个真正的User.php,它有$ likesPages(多对多页面)和likesArticles(多对多文章)。 =>反面

然后你的Page.php有$ likes(多对多用户)和Article.php有$ likes(多对多用户)。 => OWNING SIDE有连接表(likes_page_user和likes_article_user)

希望有所帮助!