PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

सिम्फनी 3 / सिद्धांत के साथ विशेषताओं के साथ एक-से-एक-से-एक फॉर्म

आप सिम्फनी रूपों के साथ सबसे कठिन समस्याओं में से एक में आ गए हैं। सौभाग्य से, कुछ अच्छे दस्तावेज हैं। मुझे महत्वपूर्ण चरणों को संक्षेप में बताएं।

आप सही कह रहे हैं:यदि आप किसी व्यक्ति के दृष्टिकोण से उस संबंध में हेरफेर करना चाहते हैं, तो इकाई व्यक्ति को पर्सनजॉब के साथ अपने संबंधों के बारे में जानने की आवश्यकता है। तो आपको एक संपत्ति जोड़ने की जरूरत है:

// src/AppBundle/Entity/Person.php
/**
 * @ORM\OneToMany(targetEntity="PersonJob", mappedBy="person")
 */
private $personJobs;

public function __construct()
{
    $this->personJobs = new \Doctrine\Common\Collections\ArrayCollection();
}

और फिर आपके पास फॉर्म टाइप होगा

// src/AppBundle/Form/PersonType.php
$builder
    ->add('name')
    ->add('firstname')
    ->add('personJobs', CollectionType::class, array(
        'entry_type'   => PersonJobType::class,
        'allow_add' => true,
    )
;

personJobs के प्रकार पर ध्यान दें खेत। चूंकि एक व्यक्ति के पास कई व्यक्ति नौकरियां हो सकती हैं, इसलिए आपको एक फॉर्म प्रकार की आवश्यकता होती है जो संग्रह को संभाल सके। यह बिल्ट-इन CollectionType . का उद्देश्य है (इसका दस्तावेज़ीकरण देखें! ) आपको प्रपत्र प्रकार PersonJobType . की भी आवश्यकता है , ताकि CollectionType सब-फॉर्म बनाना जानते हैं:

class PersonJobType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('comment')
            ->add('datestart', DateTimeType::class)
            ->add('dateend', DateTimeType::class)
            ->add('job') // requires Job::__toString() to be defined!
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\PersonJob'
        ));
    }
}

डिबगिंग उद्देश्यों के लिए, अपने नियंत्रक को

. में बदलें
 public function testAction()
 {
    $person = new Person();
    $form = $this->createForm(PersonType::class, $person);
    $form->add('submit', SubmitType::class);

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        print '<pre>';
        var_dump($form->getData());
        die();
    }

    return $this->render('default/index.html.twig', [
        'form' => $form->createView(),
    ]);
}

अब आगे बढ़ें और आइटम जोड़ना और हटाना (आपको form.emails . को बदलने जैसे मामूली बदलाव करने होंगे form.personJobs . के साथ )।

फ़ॉर्म

फॉर्म इस तरह दिखेगा

“एक अन्य व्यक्ति की नौकरी जोड़ें” . के साथ बस व्यक्ति फ़ॉर्म लिंक:

एक व्यक्ति नौकरी जोड़ना:

कुछ और पर्सनजॉब जोड़ना:

प्राप्त डेटा

फ़ॉर्म सबमिट करें और var_dump . का आउटपुट देखें :

object(AppBundle\Entity\Person)#247 (5) {
  ["id":"AppBundle\Entity\Person":private]=>
  NULL
  ["name":"AppBundle\Entity\Person":private]=>
  string(12) "Charles Dude"
  ["firstName":"AppBundle\Entity\Person":private]=>
  string(7) "Charles"
  ["active":"AppBundle\Entity\Person":private]=>
  bool(true)
  ["personJobs":"AppBundle\Entity\Person":private]=>
  object(Doctrine\Common\Collections\ArrayCollection)#248 (1) {
    ["elements":"Doctrine\Common\Collections\ArrayCollection":private]=>
    array(2) {
      [0]=>
      object(AppBundle\Entity\PersonJob)#962 (6) {
        ["id":"AppBundle\Entity\PersonJob":private]=>
        NULL
        ["comment":"AppBundle\Entity\PersonJob":private]=>
        string(19) "Something important"
        ["datestart":"AppBundle\Entity\PersonJob":private]=> 
        object(DateTime)#1088 (3) { … }
        ["dateend": …] => …
        ["person":"AppBundle\Entity\PersonJob":private]=>
        NULL
        ["job":"AppBundle\Entity\PersonJob":private]=>
        object(AppBundle\Entity\Job)#1171 (2) {
          ["id":"AppBundle\Entity\Job":private]=>
          int(2)
          ["name":"AppBundle\Entity\Job":private]=>
          string(5) "Job 2"
        }
      }
      [1]=> …
  }
}

दो काम किए जाने बाकी हैं:

  1. person सेट करें नेस्टेड PersonJob . की संपत्ति नए (लेकिन अभी तक कायम नहीं) व्यक्ति के लिए ठीक से संस्थाएं।

  2. डॉक्ट्रिन को नए PersonJob . के बारे में बताएं $em->persist(…) . पर कॉल करके इकाइयां उन पर।

प्रासंगिक दस्तावेज:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक सरणी के साथ एक तैयार बयान की आपूर्ति करें

  2. [लारवेल]:SQLSTATE [3F000]:अमान्य स्कीमा नाम

  3. पोस्टग्रेस बिट डेटा प्रकार को कैसे संभालता है?

  4. सभी स्कीमा में PostgreSQL एक्सटेंशन स्थापित करना

  5. PostgreSQL में एक uuid के बड़े सिरे से बड़ा पूर्णांक बनाएं