首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原则防止在连接表中组合自引用

原则防止在连接表中组合自引用
EN

Stack Overflow用户
提问于 2017-08-04 05:31:57
回答 1查看 211关注 0票数 0

我想创建实体房间,其中包含两个用户之间的对话,并为此额外的唯一字段。我是这样实现的:

代码语言:javascript
复制
/**
 * @ORM\Table(name="chat_rooms")
 * @ORM\Entity(repositoryClass="Cunningsoft\ChatBundle\Repository\RoomRepository")
 */
class Room
{

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Application\Sonata\UserBundle\Entity\User", inversedBy="startedChatting")
     * @ORM\JoinColumn(name="first_user", referencedColumnName="id")
     */
    private $firstUser;

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Application\Sonata\UserBundle\Entity\User", inversedBy="joinedChatting")
     * @ORM\JoinColumn(name="second_user", referencedColumnName="id")
     */
    private $secondUser;

User.orm.xml:

代码语言:javascript
复制
<one-to-many target-entity="Cunningsoft\ChatBundle\Entity\Room" mapped-by="firstUser" field="startedChatting">
            <cascade>
                <cascade-persist/>
            </cascade>
        </one-to-many>
        <one-to-many target-entity="Cunningsoft\ChatBundle\Entity\Room" mapped-by="secondUser" field="joinedChatting">
            <cascade>
                <cascade-persist/>
            </cascade>
        </one-to-many>

它工作得很好,但在Room端的创建实例时,我可以创建以下记录:

代码语言:javascript
复制
+------------+-------------+
| first_user | second_user |
+------------+-------------+
|          3 |           4 |
|          4 |           3 |
+------------+-------------+

问题是如何防止语义相同的数据重复,哪种方法是正确的,是在数据库上做还是在PHP端做?

EN

回答 1

Stack Overflow用户

发布于 2017-11-02 05:33:23

我想你要找的是这个:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/composite-primary-keys.html

通过将@Id添加到这两个属性,看起来您已经完成了此操作。这将在数据库中创建一个复合主键。这将确保您的表对于每个相应字段的同一两个用户永远不会有多个条目。

这都是基于您拥有外键,或者至少在字段上设置了唯一索引。

您不会想尝试用PHP来处理这个问题,因为每次需要创建一个新值时,您都必须遍历表中的每个值,无论您使用哪个SQL数据库提供程序,它都应该能够更容易地处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45494826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档