我一直在使用带有fos用户捆绑包的symfony 3.4框架开发多用户Web应用程序,以便于轻松地操作用户。 我已经集成了捆绑软件,并且一切正常,除了通过继承涉及多个用户时,捆绑软件功能不符合我的需求! 在fos bundle中是否有实现多用户继承的技巧?
我尝试了许多不同的技巧,例如更改角色,更改用户模型界面,使用symfony组,但是所有这些似乎都不起作用! 可以(以丑陋的方式)解决我的问题的是更改discriminator列的值。
* @ORM\Table(name="fos_user")
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="typeutilisateur", type="string")
* @ORM\DiscriminatorMap({"Parent"="User","admin" =
"Administrateur","association"
="AsoociationsBundle\Entity\Association",
"Demandeurservice"="EldersStoryBundle\Entity\Demandeurservice",
"Formateur"="FormationBundle\Entity\Formateur"
,"Prestataire"="AnnonceEldersCareBundle\Entity\Prestataireservice"})
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string
*
* @ORM\Column(name="nom", type="string", length=30, nullable=true)
*/
private $nom;
/**
* @var string
*
* @ORM\Column(name="prenom", type="string", length=30, nullable=true)
*/
private $prenom;
/**
* @var string
*
* @ORM\Column(name="adresse", type="string", length=50)
*/
private $adresse;
/**
* @var string
*
* @ORM\Column(name="telephone", type="integer")
*/
private $telephone;
/**
* @var string
*
* @ORM\Column(name="sexe", type="string", length=30, nullable=true)
*/
private $sexe;
/**
* @var \DateTime
*
* @ORM\Column(name="datecreation", type="datetime")
*/
private $datecreation;
/**
* @var string
*
* @ORM\Column(name="avatar", type="string", length=255)
*/
private $avatar;
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Group")
* @ORM\JoinTable(name="fos_user_user_group",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")}
* )
*/
protected $groups;
public function __construct()
{
parent::__construct();
}
}
/*This is the sub class*/
<?php
namespace EldersStoryBundle\Entity;
use AppBundle\Entity\User;
use Doctrine\ORM\Mapping as ORM;
/**
* Demandeurservice
*
* @ORM\Table(name="demandeurservice")
* @ORM\Entity(repositoryClass="EldersStoryBundle\
Repository\DemandeurserviceRepository")
*/
class Demandeurservice extends User
{
/**
* @var string
*
* @ORM\Column(name="typemaladie", type="string", length=50)
*/
private $typemaladie;
/**
* @var string
*
* @ORM\Column(name="descriptionmaladie", type="string", length=255)
*/
private $descriptionmaladie;
/**
* @var string
*
* @ORM\Column(name="etatmaladie", type="string", length=255)
*/
private $etatmaladie;
/**
* @var int
*
* @ORM\Column(name="pointelderly", type="integer")
*/
private $pointelderly;
}
每次我订阅时,我都会获得表中的行,但具有区分符的列值=“ parent” 那么,有什么主要的方法可以做到这一点吗?还是至少要更改鉴别符列的值?
答案 0 :(得分:0)
删除DiscriminatorMap
。如果您不创建一个,那么Doctrine将自动生成一个。只要您不弄乱Entity对象的名称(例如,将Person
更改为Persona
或其他任何东西),那就是您的最佳选择。它也更具动态性,因为如果/当您添加其他类型时,它将为您更新(当删除缓存时)。
See here,最后引号为:
如果未提供区分图,则该图将自动生成。自动生成的鉴别符映射包含每个类的小写短名称作为键。