0

有四张表

Articles:(id, body)
Questions (id, body)
Votes (id, user_id, votable_id, vote_type)
comments(id, user_id, body, commentable_id, comment_type)

vote存储用户对Articles和Questions的点赞记录;使用vote_type区分存储的记录是对文章还是问题的点赞

id user_id votable_id vote_type 说明
1 2 1 article 该记录表示用户2对文章1的点赞
1 2 1 question 该记录表示用户2对问题1的点赞

comments存储用户对Articles和Questions的回复记录;使用commentable_type区分存储的记录是对文章还是问题的回复

id user_id commentable_id comment_type 说明
1 2 1 article 该记录表示用户2对文章1的回复
1 2 1 question 该记录表示用户2对问题1的回复

背景结束;

那么怎么声明他们之间的mapping关系呢;

use Doctrine\ORM\Mapping as ORM;
/**
 * @ORM\Entity
 * @ORM\Table(name="articles")
 */
class Article
{
   //...
    /**
     *
     * @ORM\OneToMany(targetEntity="Vote", mappedBy="votable")
     */
    $votes;
}

class Vote
{
   //...
    /**
     *
     * @ORM\ManyToOne(targetEntity="Article|Question?", inversedBy="votes")
     */
    $votes;
}

查看全部 2 个回答

0

@boxsnake 这样会有个新的问题

>php bin/console doctrine:schema:update --force


  [Doctrine\DBAL\Schema\SchemaException]
  The table with name 'symfony.votes' already exists.


doctrine:schema:update [--complete] [--dump-sql] [-f|--force] [--em [EM]] [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [-e|--env ENV] [--no-debug] [--] <command>