在条令(Symfony2)中的多个联接表中有附加列 处境
我有两个实体用户和组,它们的关系是ManyToMany。关系被创建为单独的表(称为在条令(Symfony2)中的多个联接表中有附加列 处境,symfony,doctrine-orm,many-to-many,Symfony,Doctrine Orm,Many To Many,我有两个实体用户和组,它们的关系是ManyToMany。关系被创建为单独的表(称为user\u-group),有两列user\u-id和group\u-id 问题 我想在表用户组中再添加一个字段addedOn TIMESTAMP DEFAULT CURRENT\u TIMESTAMP。我不在乎doctrine不会看到这个专栏,我可以在需要的时候通过SQL选择它 问题: 这可以通过条令配置来实现吗?如果是,如何进行? 我知道我可以在DB中添加列,但每次生成migration diff时,都会有SQ
user\u-group
),有两列user\u-id
和group\u-id
问题
我想在表用户组
中再添加一个字段addedOn TIMESTAMP DEFAULT CURRENT\u TIMESTAMP
。我不在乎doctrine不会看到这个专栏,我可以在需要的时候通过SQL选择它
问题:
这可以通过条令配置来实现吗?如果是,如何进行?
我知道我可以在DB中添加列,但每次生成migration diff时,都会有SQL语句删除此列
相关信息
应用程序:Symfony 2.5,条令2.4
关系在配置中定义为User.php:
/**
* @ORM\ManyToMany(targetEntity="RAZ\UserBundle\Entity\Group")
* @ORM\JoinTable(name="user_group",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")}
* )
*/
protected $groups;
不,您不能,要在连接表中有
manytomy
关联和附加列,您需要重写映射,以便在用户和组实体之间有一个连接实体,如下所示
对于用户,您的映射将如下所示
OneToMany
------------>
User UserHasGroups
<------------
ManyToOne
集团实体
用户组实体
现在您已经映射了您的实体,您可以通过提供用户和组值,如findBy,让您的UserHasGroups
实体使用存储库方法,findAll
etc,或者如果您有用户对象,那么您可以直接获得UserHasGroups
对象,该对象包含该用户的关联集合,如果附加列是“有序的”(以便按顺序进行某种排序)-是否有机会根据默认值进行订购,例如,在本附加栏的帮助下对组进行订购?
OneToMany
----------->
Group UserHasGroups
<-----------
ManyToOne
/**
* User
* @ORM\Table(name="user_table_name")
* @ORM\Entity
*/
class User
{
/**
* @ORM\OneToMany(targetEntity="NameSpace\YourBundle\Entity\UserHasGroups", mappedBy="users",cascade={"persist","remove"} )
*/
protected $hasGroups;
}
/**
* Group
* @ORM\Table(name="group_table_name")
* @ORM\Entity
*/
class Group
{
/**
* @ORM\OneToMany(targetEntity="NameSpace\YourBundle\Entity\UserHasGroups", mappedBy="groups",cascade={"persist","remove"} )
*/
protected $hasUsers;
}
/**
* UserHasGroups
* @ORM\Table(name="user_groups_table_name")
* @ORM\Entity
*/
class UserHasGroups
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="NameSpace\YourBundle\Entity\Group", cascade={"persist"}, fetch="LAZY")
* @ORM\JoinColumn(name="group_id", referencedColumnName="id")
*/
protected $groups;
/**
* @ORM\ManyToOne(targetEntity="NameSpace\YourBundle\Entity\User", cascade={"persist","remove"} ,inversedBy="medias", fetch="LAZY" )
* @ORM\JoinColumn(name="user_id", referencedColumnName="id",nullable=true)
*/
protected $users;
/**
* @var \DateTime
* @ORM\Column(name="added_on", type="datetime")
*/
protected $addedOn;
public function __construct()
{
$this->addedOn= new \DateTime('now');
}
}