FOSUserBundle Symfony2:两个条令表

FOSUserBundle Symfony2:两个条令表,symfony,doctrine,fosuserbundle,Symfony,Doctrine,Fosuserbundle,我正在使用FOSUserBundle开发我的网站项目,我想知道(以及如何)为用户注册设置两个不同的表。我想这样做,因为我认为在一个表和另一个用户中设置管理员更容易。p> 我保持开放的心态,所以如果你认为我的决定不对,如果你能为我提供另一种方法,那就太好了 感谢阅读。我认为您可以通过定义自定义用户提供程序(一个将检索您的用户实体的类,给定用户名: 话虽如此,我不确定这是一个很好的方式来做你想做的,因为你将有信息(电子邮件,密码…)将分为几个表 我会做一些有点不同的事情:创建一个管理员实体,它将存储

我正在使用FOSUserBundle开发我的网站项目,我想知道(以及如何)为用户注册设置两个不同的表。我想这样做,因为我认为在一个表和另一个用户中设置管理员更容易。p> 我保持开放的心态,所以如果你认为我的决定不对,如果你能为我提供另一种方法,那就太好了


感谢阅读。

我认为您可以通过定义自定义用户提供程序(一个将检索您的用户实体的类,给定用户名:

话虽如此,我不确定这是一个很好的方式来做你想做的,因为你将有信息(电子邮件,密码…)将分为几个表

我会做一些有点不同的事情:创建一个管理员实体,它将存储关于管理员的设置(这个和那个的权限等),并在您的用户实体之间建立关系(它将单独存储用户名/密码…)和管理员实体。如果用户是普通用户,此关系将为,但如果是管理员,则将链接到管理员实体。详细信息:

我假设您有一个根据设置的用户实体。只需添加一个与管理员实体的OneToOne关系

<?php
// src/Acme/UserBundle/Entity/User.php

namespace Acme\UserBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\OneToOne(targetEntity="Acme\UserBundle\Entity\Administrator", inversedBy="user")
     */
    private $administrator;

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }

    public function getAdministrator()
    {
        return $this->administrator;
    }

    public function setAdministrator(Acme\UserBundle\Entity\Administrator $administrator)
    {
        $this->administrator = $administrator;
        $adinistrator->setUser($this);

        return $this;
    }
}

我认为你的解决方案比我的好。但是…我怎么能做到呢?你能给我推荐一个网站吗?谢谢。我在我的第一个答案中添加了更多细节,希望能有所帮助!
<?php
// src/Acme/UserBundle/Entity/Administrator.php

namespace Acme\UserBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="Administrator")
 */
class Administrator
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\OneToOne(targetEntity="Acme\UserBundle\Entity\User", mappedBy="administrator")
     */
    private $user;

    /**
     * @var boolean
     *
     * @ORM\Column(name="canDeletePosts", type="boolean")
     */
    private $canDeletePosts;

    // And all the fields you need !

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }

    public function getUser()
    {
        return $this->user;
    }

    public function setUser(Acme\UserBundle\Entity\User $user)
    {
        $this->user = $user;

        return $this;
    }

    public function setCanDeletePosts($canDeletePosts)
    {
        $this->canDeletePosts = $canDeletePosts;

        return $this;
    }

    public function getCanDeletePosts()
    {
        return $this->canDeletePosts;
    }
}
$canDeletePosts = $this->getUser()->getAdministrator()->getCanDeletePosts();
if ($canDeletePosts)
{
    // Remove the post
}