Symfony3 doctrine2 ManyToMany без добавления в БД в таблице, где есть только 2 ПК - PullRequest
0 голосов
/ 24 мая 2018

У меня есть 3 таблицы в моей БД, например: Article: with idArticle.Fournissor с idFournissor, а посередине из них есть «Got», который состоит из 1 PK (idFournissor, idArticle).

Это отношение многих ко многим.Кроме того, у меня есть 2 формы: ArticleType и FournissorType, в каждой форме при отправке у меня есть правильные значения в моей БД.Однако для чемпиона idFournissor в idArticle или idArticle в idFournissor он делает все что угодно.Я объясняю, например, форму Статьи: я должен выбрать фурнессор для своей статьи, поэтому я выбираю один из них, но на самом деле в БД он не сохраняет что-то.

Я хотел бы, чтобы при отправкеформа есть в "Получил" значение идентификатора статьи и fournissor.

Вот моя статья сущности, если она может помочь:

    use Doctrine\ORM\Mapping as ORM;

   /**
   * Article
   *
   * @ORM\Table(name="Article",indexe{@ORM\Index(name="I_FK_Article_TypeArticle", columns={"idTypeArticle"})})
   * @ORM\Entity
   */
  class Article
  {
    /**
     * @var integer
     *
     * @ORM\Column(name="idArticle", type="bigint")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $idarticle;

    /**
     * @var string
     *
     * @ORM\Column(name="reference", type="string", length=35, nullable=true)
     */
    private $reference;

    /**
     * @var string
     *
     * @ORM\Column(name="designationFR", type="string", length=160, nullable=true)
     */
    private $designationfr;

    /**
     * @var string
     *
     * @ORM\Column(name="designationEN", type="string", length=160, nullable=true)
     */
    private $designationen;

    /**
     * @var string
     *
     * @ORM\Column(name="plan", type="string", length=70, nullable=true)
     */
    private $plan;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="dateCreation", type="date", nullable=true)
     */
    private $datecreation;

    /**
     * @var integer
     *
     * @ORM\Column(name="idProduit", type="bigint", nullable=true)
     */
    private $idproduit;

    /**
     * @var integer
     *
     * @ORM\Column(name="idSousEnsemble", type="bigint", nullable=true)
     */
    private $idsousensemble;

    /**
     * @var \gkeepBundle\Entity\Typearticle
     *
     * @ORM\ManyToOne(targetEntity="gkeepBundle\Entity\Typearticle")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="idTypeArticle", referencedColumnName="idTypeArticle")
     * })
     */
    private $idtypearticle;

    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="gkeepBundle\Entity\Fournisseur", mappedBy="idarticle")
     */
    private $idfournisseur;

    /**
     * Constructor
     */
    public function __construct()
    {
        $this->idfournisseur = new \Doctrine\Common\Collections\ArrayCollection();
    }

Сущность Fournisseur:

/**
 * @var \Doctrine\Common\Collections\Collection
 *
 * @ORM\ManyToMany(targetEntity="gkeepBundle\Entity\Article", inversedBy="idfournisseur", cascade={"persist"})
 * @ORM\JoinTable(name="detient",
 *   joinColumns={
 *     @ORM\JoinColumn(name="idFournisseur", referencedColumnName="idFournisseur")
 *   },
 *   inverseJoinColumns={
 *     @ORM\JoinColumn(name="idArticle", referencedColumnName="idArticle")
 *   }
 * )
 */
private $idarticle;

Статья сущности:

   /**
 * Add idfournisseur
 *
 * @param \gkeepBundle\Entity\Fournisseur $idfournisseur
 *
 * @return Article
 */
public function addIdfournisseur(\gkeepBundle\Entity\Fournisseur $idfournisseur)
{
    $idfournisseur->set($this);
    $this->idfournisseur[] = $idfournisseur;

    return $this;
}

Сущность Fournisseur:

 /**
 * Add idarticle
 *
 * @param \gkeepBundle\Entity\Article $idarticle
 *
 * @return Fournisseur
 */
public function addIdarticle(\gkeepBundle\Entity\Article $idarticle)
{
    $this->idarticle[] = $idarticle;

    return $this;
}

Надеюсь, что я все понял, скажите, если вы не понимаете.спасибо за продвижение

1 Ответ

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

Я думаю, что «каскад сохраняется» был пропущен.Вот пример:

Агентский пользователь может иметь много служб, а служба может иметь много пользователей.

 // It's Agency Entity
 /**
 * @var Service[]|ArrayCollection
 *
 * @ORM\ManyToMany(targetEntity="Service", inversedBy="agencyUsers", cascade={"persist"})
 * @ORM\JoinTable(name="agency_user_services",
 *      joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="service_id", referencedColumnName="id")}
 *      )
 */
protected $services;

 /**
 * Add services
 *
 * @param ServiceInterface $services
 * @return AgencyAdmin
 */
public function addService(ServiceInterface $services)
{
    $this->services[] = $services;

    return $this;
}

/**
 * Remove services
 *
 * @param ServiceInterface $services
 */
public function removeService(ServiceInterface $services)
{
    $this->services->removeElement($services);
}


//It's Service Entity
/**
 * @var AgencyAdmin[]|ArrayCollection
 * @ORM\ManyToMany(targetEntity="AgencyAdmin", mappedBy="services")
 */
protected $agencyUsers;

/**
 * Add agencyUsers
 *
 * @param AgencyAdmin $agencyUsers
 * @return Service
 */
public function addAgencyUser(AgencyAdmin $agencyUsers)
{
    $this->agencyUsers[] = $agencyUsers;

    return $this;
}

/**
 * Remove agencyUsers
 *
 * @param AgencyAdmin $agencyUsers
 */
public function removeAgencyUser(AgencyAdmin $agencyUsers)
{
    $this->agencyUsers->removeElement($agencyUsers);
}
...