Symfony: дополнительные столбцы таблицы ManyToMany - PullRequest
0 голосов
/ 15 мая 2018

У меня есть таблица «многие ко многим» для User и House, называемая user_house.Вместо двух столбцов: user_id и house_id, я хочу добавить еще 3: например, action, creation_at, updated_at.Как я могу это сделать?

Я не могу найти соответствующие документы по этому вопросу.

Следующее просто создает отдельную таблицу с двумя столбцами в ней.

class User extends EntityBase
{
    ...
    /**
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\House")
     */
    protected $action;

По сути, я хочу добиться:

в таблице user_house комбинация user_id, house_id, action должна быть уникальной.

когда пользователь щелкает «вид» на дом, таблица user_house обновляется с some user_id, some house_id, view, now(), now()

, когда пользователь щелкает«как» в доме, таблица user_house обновляется с some user_id, some house_id, like, now(), now()

, когда пользователь нажимает «запросить вызов» наhouse, таблица user_house обновляется с some user_id, some house_id, contact, now(), now()

Может ли кто-нибудь указать мне правильное направление?Спасибо!

1 Ответ

0 голосов
/ 15 мая 2018

Вам необходимо разорвать отношение ManyToMany к OneToMany и ManyToOne, введя сущность соединения, называемую UserHasHouses. Таким образом, вы можете добавить несколько столбцов в таблицу соединений user_house

* 1007.* User Entity
/**
 * User
 * @ORM\Table(name="user")
 * @ORM\Entity
 */
class User
{
    /**
     * @ORM\OneToMany(targetEntity="NameSpace\YourBundle\Entity\UserHasHouses", mappedBy="users",cascade={"persist","remove"} )
     */
    protected $hasHouses;

}

House Entity

/**
 * Group
 * @ORM\Table(name="house")
 * @ORM\Entity
 */
class House
{
    /**
     * @ORM\OneToMany(targetEntity="NameSpace\YourBundle\Entity\UserHasHouses", mappedBy="houses",cascade={"persist","remove"} )
     */
    protected $hasUsers;

}

UserHasHouses Entity

/**
 * 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)

...