代码之家  ›  专栏  ›  技术社区  ›  Az.Youness

Symfony/条令-多用户类型

  •  1
  • Az.Youness  · 技术社区  · 7 年前


    通常(不考虑原则)我认为数据库应该是这样的:

    单位
    客户 (id、用户id、姓名、性别…)
    (id、发送者id(用户id)、接收者id(用户id)、消息等)
    ...

    所以现在我想知道使用 教条 ,实体会是什么样子?

    (注意:我没有使用 FOSUserBundle )

    1 回复  |  直到 7 年前
        1
  •  6
  •   Peyman Mohamadpour    7 年前

    实现此域:

    • 使用者
    • 单位

    你可以考虑两种不同的方法:

    第一种方法

    这种方法使用关联。如果选择此选项,则应根据某些逻辑手动将适当的(公司或客户)链接到当前用户。每个 User 在任何给定的时间点上都可能只有一个字段。公司或客户,而不是两者。

    使用者

    /** @Entity */
    class User
    {
        /**
         * @ORM\column(type="string")
         */
        protected password;
    
        /**
         * @ORM\column(type="array")
         */ 
        protected roles;
    
        /**
         * @ORM\OneToOne(targetEntity="Company", mappedBy="user")
         */
        protected Company;
    
        /**
         * @ORM\OneToOne(targetEntity="Client", mappedBy="user")
         */ 
        protected Client;
    }
    

    单位

    /** @Entity */
    class Company
    {
        /**
         * @ORM\column(type="string")
         */
        protected city;
    
        /**
         * @ORM\OneToOne(targetEntity="User", inversedBy="company")
         */ 
        protected user;
    }
    

    /** @Entity */
    class Client
    {
        /**
         * @ORM\column(type="string")
         */
        protected sex;
    
        /**
         * @ORM\OneToOne(targetEntity="User", inversedBy="client")
         */ 
        protected user;
    }
    

    第二种方法

    这种方法使用继承,看起来更灵活,但也有其缺点。

    使用者

    /** @MappedSuperclass */
    class User
    {
        /**
         * @ORM\column(type="string")
         */
        protected password;
    
        /**
         * @ORM\column(type="array")
         */ 
        protected roles;
    }
    

    单位

    /** @Entity */
    class Company extends User
    {
        /**
         * @Id @Column(type="integer")
         */
        protected $id;
    
        /**
         * @ORM\column(type="string")
         */
        protected city;
    }
    

    客户

    /** @Entity */
    class Client extends User
    {
        /**
         * @Id @Column(type="integer")
         */
        protected $id;
    
        /**
         * @ORM\column(type="string")
         */
        protected sex;
    }
    

    你也有一个 一对多 使用者 & 消息

    • 一个 使用者 许多的 信息
    • 一个 只属于 一个 使用者

    第一种方法 上面的是好的,但是使用 第二种方法 ,你正在给自己找麻烦 Doctrine says :

    单向的 (仅限拥有方)。这意味着 一对多