#hoopla

  • Startseite
  • Kontakt
  • Hoopla?!
  • Datenschutz
  • Impressum
  • « Insight: QR Code Scanning for Event Invitations with Android
  • MySQL dying and not restarting on Ubuntu 14.04.3 LTS »

Sonata: Fill, save, and update multiple-entry field

Eingetragen von fayon am 02 Jul 2017 in Arbeit
Sonata: Fill, save, and update multiple-entry field

I have an application which contains shipments and orderings. One shipment can have 0..N orderings. One ordering has maximum one shipment.

Within the ShipmentAdmin I configured the form fields as follows. They show all orderings without a shipment (1). If the current form already shows an existing shipment, we also need to show these shipments (2).

    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
            ...
            ->add('orderings','entity', 
              array(
                  'class'   => 'Lysano\ConnectBundle\Entity\Ordering',
                  'query_builder' => function 
                  (\Lysano\ConnectBundle\Repository\OrderingRepository $er) {
                    $qb = $er->createQueryBuilder('o');
                    $qb->where('o.shipment IS NULL'); // 1
                    if ($this->getSubject()->getId()) { // 2
                      $qb->orWhere('o.shipment = :shipm')
                          ->setParameter('shipm', $this->getSubject());
                    }
                      return $qb;
                  },
                  'multiple' => true
                  )
              )
       ;
    }

In order to save chosen orderings, I added prePersist() and preUpdate() to ShipmentAdmin. prePersist() iterates through all chosen orderings and updates them (3). preUpdate() needs to also care about deleted orderings (4).

    public function prePersist($object)
    {
        ...
        foreach ($object->getOrderings() as $ordering) { // 3
          $ordering->setShipment($object);
        }
   }

    public function preUpdate($object)
    {
        ...
        
        // delete old // 4
        $idArr = array(); // IDs to keep
        foreach ($object->getOrderings() as $ordering) {
          $idArr[] = $ordering->getId();
        }
        $em = $this->getModelManager()->getEntityManager($this->getClass());
        $qb = $em->createQueryBuilder();
        $qb->update('LysanoConnectBundle:Ordering', 'o')
                ->set('o.shipment', 'null')
                ->where('o.shipment = ?1');
        if (count($idArr) > 0) {
          $qb->andWhere($qb->expr()->notIn('o.id', $idArr));
        }
        $q = $qb->setParameter(1, $object->getId())
          ->getQuery();
        $q->execute();
        
        // add new:
        foreach ($object->getOrderings() as $ordering) {
          $ordering->setShipment($object);
        }
    }
Dieser Eintrag wurde eingetragen von fayon und ist abgelegt unter Arbeit.

Noch kein Feedback


Formular wird geladen...

Kommentar-Feed für diesen Eintrag

Suche

Neueste Posts

  • MariaDB boolean comparison syntax
  • Software archeology: how to send customized HTML mails with Drupal 7
  • Connect to IP-restricted Azure MSSQL database via tunnel
  • Postgres: Convert numeric currency value to German bookkeeping standard
  • Computer scientist's way to clean up a room for online conferences
  • JTL5 + Nova Template + Youtube: "Dieses Video ist nicht verfügbar"
  • JTL5 + Nova Child Template + Google Analytics 4
  • Office 365: SMTP with Basic Auth made (im)possible
  • How to migrate from Exchange to Office365
  • Install Ubuntu 20 with a USB flash drive. Go for the old-fashioned way.

Neueste Kommentare

  • Katrin am IAA Plus: Fehlermeldung "Ware(X). Aussenhandelsstatistik Menge.fehlende Pflichtfeld"
  • Inga am IAA Plus: Fehlermeldung "Ware(X). Aussenhandelsstatistik Menge.fehlende Pflichtfeld"
  • Pulsotronic-Anlagentechnik GmbH am IAA Plus: Fehlermeldung "Ware(X). Aussenhandelsstatistik Menge.fehlende Pflichtfeld"
  • Stephan am IAA Plus: Fehlermeldung "Ware(X). Aussenhandelsstatistik Menge.fehlende Pflichtfeld"
  • Lopez am IAA Plus: Fehlermeldung "Ware(X). Aussenhandelsstatistik Menge.fehlende Pflichtfeld"
  • Heike am IAA Plus: Fehlermeldung "Ware(X). Aussenhandelsstatistik Menge.fehlende Pflichtfeld"
  • Renata am IAA Plus: Fehlermeldung "Ware(X). Aussenhandelsstatistik Menge.fehlende Pflichtfeld"
  • Sandman am Kopierstempel in Photoshop innerhalb VirtualBox funktioniert nicht
  • treviris am Kopierstempel in Photoshop innerhalb VirtualBox funktioniert nicht
  • Mike am Netzwerkscanner auf Ubuntu einrichten
  • Carlos am Nautilus 3.10 on Ubuntu 14.04: Show full date and time in list view column
  • Carlos am Nautilus 3.10 on Ubuntu 14.04: Show full date and time in list view column
  • Mohsen am IAA Plus: Fehlermeldung "Ware(X). Aussenhandelsstatistik Menge.fehlende Pflichtfeld"
  • David am Nautilus 3.10 on Ubuntu 14.04: Show full date and time in list view column
  • Conny am IAA Plus: Fehlermeldung "Ware(X). Aussenhandelsstatistik Menge.fehlende Pflichtfeld"
  • Markus am IAA Plus: Fehlermeldung "Ware(X). Aussenhandelsstatistik Menge.fehlende Pflichtfeld"
  • SK am Elster: Zertifikat verlängern gibt "Es ist ein Fehler aufgetreten! Bitte starten Sie den Browser erneut und führen Sie diese Aktion nochmal durch."
  • Menzel am IAA Plus: Fehlermeldung "Ware(X). Aussenhandelsstatistik Menge.fehlende Pflichtfeld"
  • Angelika am Elster: Zertifikat verlängern gibt "Es ist ein Fehler aufgetreten! Bitte starten Sie den Browser erneut und führen Sie diese Aktion nochmal durch."
  • Michael am IAA Plus: Fehlermeldung "Ware(X). Aussenhandelsstatistik Menge.fehlende Pflichtfeld"

©2022 by ff • Kontakt • Hilfe

b2evolution