Symfony3.4 - ссылка на коллекцию в том же поле сущности теряет связь - PullRequest
0 голосов
/ 05 декабря 2018

Извините за название, его довольно сложно описать всего несколькими словами.Вот проблема:

У меня есть клиентская сущность, которая имеет OneToMany с веб-сайтом и customerTrackingIds:

class Customer {

    ...

    /**
     * @var ArrayCollection
     * @Serializer\Exclude()
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\WebSite", mappedBy="customer",cascade={"persist","remove"},orphanRemoval=true)
    */
    private $webSites;


    /**
     * @var ArrayCollection
     * @Serializer\Exclude()
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\CustomerTrackingId", mappedBy="customer",cascade={"persist","remove"})
     */
    private $customerTrackingIds;
    ...
}

И веб-сайт:

class WebSite {

   /**
    * @var Customer
    * @Serializer\MaxDepth(1)
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Customer", inversedBy="webSites")
    * @ORM\JoinColumn(nullable=true, onDelete="SET NULL")
    */
    private $customer;   


    /**
     * @var ArrayCollection
     * @Serializer\Exclude()
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\CustomerTrackingId", mappedBy="website")
     */
    private $customerTrackingIds;
}

У клиента несколько веб-сайтов инесколько идентификационных номеров.Каждый идентификатор отслеживания связан с одним из веб-сайтов клиента, но для одного и того же веб-сайта может существовать больше идентификационных номеров.

Я использую https://github.com/ninsuo/symfony-collection для обработки набора идентификаторов сайта / отслеживания на той же странице, но когдая иду редактировать информацию, что происходит нечто действительно странное (по крайней мере, для меня).

Просматривая сеанс отладчика, я увидел, что когда форма загружает данные из submit в моем контроллере:

$formCustomer = $this->createForm( CustomerFormType::class, $customer );
    $formCustomer->handleRequest( $request );

    if ( $formCustomer->isSubmitted() && $formCustomer->isValid() ) {
        $em = $this->getDoctrine()->getManager();
        $em->persist( $customer );
        $em->flush();

Когда запрос обрабатывается, все элементы TrackingIds правильно устанавливают свой веб-сайт, но внутри веб-сайта клиентская ссылка теряется (становится нулевой).Затем происходит следующее: когда все данные сохраняются, я теряю в своей базе данных физическую связь между веб-сайтом <-> клиент (клиент становится нулевым)

Как я могу это исправить?

1 Ответ

0 голосов
/ 05 декабря 2018

Если вы когда-нибудь попадете сюда, я решил проблему, просто дважды проверив тип формы моего сайта.

С момента использования https://github.com/ninsuo/symfony-collection я создал новую форму FormTheme для отображения материалов, добавляющих / удаляющих коллекцию, на моей странице с одним полем для коллекции веб-сайтов, которым был веб-сайт name .

В любом случае, внутри моего набора формы formType у меня было ДВА поля, name И, угадайте, что, CUSTOMER .

Так как FormTheme рендерил толькополе имени, другое автоматически обнуляется, поэтому, когда оно было обработано контроллером, он действительно делал это правильно.

...