Symfony:ManyToMany表额外的列 [英] Symfony: ManyToMany table extra columns
问题描述
我有一个用于 User
和 House
的多对多表,称为 user_house
.我不仅要增加两列:user_id和house_id,还要增加3个:例如action,created_at,updated_at.我该怎么办?
I have a many to many table for User
and House
, called user_house
. Instead of just two columns: user_id and house_id, i want to add 3 more: eg action, created_at, updated_at. How can I do this?
我找不到与此相关的任何文档.
I cannot find any relevant docs on this.
以下内容仅创建一个单独的表,其中包含两列.
The following just creates a separate table with two columns in it.
class User extends EntityBase
{
...
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\House")
*/
protected $action;
基本上,我要实现的是:
Basically, what I want to achieve is:
在 user_house
表中, user_id
, house_id
, action
的组合应该是唯一的.
in the user_house
table the combination of user_id
, house_id
, action
should be unique.
当用户单击房屋上的视图"时,user_house表将更新为一些user_id
,一些house_id
,视图
, now()
, now()
when a user clicks a "view" on a house, user_house table gets updated with some user_id
, some house_id
, view
, now()
, now()
当用户在房屋上单击喜欢"时,user_house表将更新为 some user_id
, some house_id
, like
, now()
, now()
when a user clicks a "like" on a house, user_house table gets updated with some user_id
, some house_id
, like
, now()
, now()
当用户单击房屋上的请求呼叫"时,user_house表将更新为 some user_id
, some house_id
, contact
, now()
, now()
when a user clicks a "request a call" on a house, user_house table gets updated with some user_id
, some house_id
, contact
, now()
, now()
有人能指出我正确的方向吗?谢谢!
Could someone point me in the right direction? Thanks!
推荐答案
您需要通过以下方式断开与 OneToMany
和 ManyToOne
的 ManyToMany
关系引入称为 UserHasHouses
的联结实体,这样您就可以在联结表 user_house
You need to break your ManyToMany
relation to OneToMany
and ManyToOne
by introducing a junction entity called as UserHasHouses
, This way you could add multiple columns to your junction table user_house
/**
* User
* @ORM\Table(name="user")
* @ORM\Entity
*/
class User
{
/**
* @ORM\OneToMany(targetEntity="NameSpace\YourBundle\Entity\UserHasHouses", mappedBy="users",cascade={"persist","remove"} )
*/
protected $hasHouses;
}
房屋实体
/**
* Group
* @ORM\Table(name="house")
* @ORM\Entity
*/
class House
{
/**
* @ORM\OneToMany(targetEntity="NameSpace\YourBundle\Entity\UserHasHouses", mappedBy="houses",cascade={"persist","remove"} )
*/
protected $hasUsers;
}
UserHasHouses实体
/**
* UserHasHouses
* @ORM\Table(name="user_house")
* @ORM\Entity
*/
class UserHasHouses
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="NameSpace\YourBundle\Entity\House", cascade={"persist"}, fetch="LAZY")
* @ORM\JoinColumn(name="house_id", referencedColumnName="id")
*/
protected $houses;
/**
* @ORM\ManyToOne(targetEntity="NameSpace\YourBundle\Entity\User", cascade={"persist","remove"}, fetch="LAZY" )
* @ORM\JoinColumn(name="user_id", referencedColumnName="id",nullable=true)
*/
protected $users;
/**
* @var \DateTime
* @ORM\Column(name="created_at", type="datetime")
*/
protected $createdAt;
/**
* @var \DateTime
* @ORM\Column(name="updated_at", type="datetime")
*/
protected $updatedAt;
//... add other properties
public function __construct()
{
$this->createdAt= new \DateTime('now');
}
}
在ManyToMany中有其他列Doctrine(Symfony2)中的联接表
这篇关于Symfony:ManyToMany表额外的列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!