Symfony:ManyToMany表额外的列 [英] Symfony: ManyToMany table extra columns

查看:59
本文介绍了Symfony:ManyToMany表额外的列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个用于 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆