Вставить поле в доктрину совместного стола - PullRequest
0 голосов
/ 08 июня 2019

Я хочу вставить в мою объединенную таблицу RoleUser idUser и idRole, но в функцию я должен добавить объект user и роль

Как я могу это сделать?

объединенный стол RoleUser :

/**
 * RoleUser 
 *
 * @ORM\Table(name="role_user", indexes={@ORM\Index(name="fk_role_user_id", columns={"ref_user_id"}), @ORM\Index(name="fk_role_id", columns={"ref_role_id"})})
 * @ORM\Entity(repositoryClass="AppBundle\Repository\RoleUserRepository")
 */
class RoleUser 
{

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var \AppBundle\Entity\Role
     *
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Role")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="ref_role_id", referencedColumnName="id")
     * })
     */
    private $refRole;

    /**
     * @var \AppBundle\Entity\User
     *
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\User")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="ref_user_id", referencedColumnName="id")
     * })
     */
    private $refUser;  


      /**
         * @param Role $refRole
      */
     public function setRefRole(\AppBundle\Entity\Role $refRole)
     {
       $this->refRole = $refRole;
     }


     /**
      * @param User $refUser
      */
     public function setRefUser(\AppBundle\Entity\User $refUser)
     {
        $this->refUser= $refUser;
     }



}

В моем контроллере я хочу вставить следующее (для конкретного случая я должен вставить в фоновом режиме, пользователь не может выбрать свою роль):

 $user = new User();
 $role= new Role();
 $roleUser =new RoleUser();

 $roleUser->setRefUser($user->getId());
 $roleUser->setRefRole(1);

но я знаю, что должен передать пользователя и роль:

$roleUser->setRefUser($user);
 $roleUser->setRefRole($role);

1 Ответ

0 голосов
/ 12 июня 2019

Вам нужно использовать отношение ManyToMany вместо OneToMany и удалить свой Entity RoleUser. Вы можете следовать следующему примеру в официальной документации, чтобы отобразить этот тип отношений.

Для сохранения:

В этом случае вам нужно добавить в две сущности это отношение:

<?php

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * Location
 *
 * @ORM\Table(name="location")
 * @ORM\Entity
 */
class Location
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;


    /**
     * <p>Represent the </p>
     * @ORM\ManyToMany(targetEntity="LogoLocation", mappedBy="locations")
     */
    private $logoLocationCurse;
    /**
     * Location constructor.
     */
    public function __construct()
    {
        $this->logoLocationCurse = new ArrayCollection();
    }
    public function addlogoLocationCurse(LogoLocation $location)
    {
        $this->logoLocationCurse->add($location);
        $location->addLocations($this);
    }
    public function removeLogo(LogoLocation $location)
    {
        $this->logoLocationCurse->removeElement($location);
        $location->removeLocation($this);
    }
}
<?php
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use \DateTime;

/**
 * Class LogoLocation
 * @ORM\Table(name="logo_location_curso")
 * @ORM\Entity
 */
class LogoLocation
{
    /**
     * @var integer
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * Many Users have Many Groups.
     * @ORM\ManyToMany(targetEntity="Location", inversedBy="logocurso")
     * @ORM\JoinTable(name="logo_locations")
     */
    private $locations;
    /**
     * LogoLocation constructor.
     */
    public function __construct()
    {
        $this->locations    = new ArrayCollection();
    }
    /**
     * @param Location $location
     */
    public function addLocations(Location $location)
    {
        $this->locations->add($location);
    }
    /**
     * @param Location $location
     */
    public function removeLocation(Location $location)
    {
        $this->locations->removeElement($location);
    }
    /**
     *
     */
    public function removeLocations()
    {
        /** @var Location $location */
        foreach ($this->locations as $location) {
            $location->removeLogo($this);
        }
    }
}

и сделать флеш

...