Doctrine - insert multiple rows with just one save()

前端 未结 5 1233
死守一世寂寞
死守一世寂寞 2020-12-08 21:03

How do I insert multiple rows into table calling save() method once in Doctrine?

相关标签:
5条回答
  • 2020-12-08 21:34

    Here another solution ,tested on Doctrine 1.2. No need to save each records, the flush() automatically finds out all the unsaved instances and saves them all.

    $row = new \My_Doctrine_Record();
    $row->name = 'aaa';
    $row->approved = 1;
    
    /// ...
    
    $row = new \My_Doctrine_Record();
    $row->name = 'val';
    $row->approved = 'bbb';
    
    Doctrine_Manager::connection()->flush();
    
    0 讨论(0)
  • 2020-12-08 21:41

    If you use symfony2 it is so easy

    // get the manager
    $em = $this->getDoctrine()->getManager();
    
    // enter the records
    $em->persist($entitiy1);
    $em->persist($entitiy2);
    $em->persist($entitiy3);
    $em->persist($entitiy4);
    $em->persist($entitiy5);
    
    // save the entries
    $em->flush();
    
    0 讨论(0)
  • 2020-12-08 21:49

    Add each record to a Doctrine_Collection the call save() on the collection object.

    $collection = new Doctrine_Collection('tablename');
    $collection->add($record1);
    $collection->add($record2);
    $collection->add($record3);
    $collection->add($record4);
    $collection->save();
    

    This only works if all the records are for the same table. Otherwise you're out of luck.

    0 讨论(0)
  • 2020-12-08 21:49

    1)Declare all the tables. 2)Create the form. 3)Send to multiple tables. 4)Persist data.

    use AppBundle\Entity\site;
    use AppBundle\Entity\nba;
    

    1)Declare all the tables.

     $site = new site;
     $nba = new nba;
    

    2)Create form

    $form = $this->createFormBuilder($site)
    
    
    
    
        ->add('site_id', IntegerType::class, array('attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px')))
        ->add('category', ChoiceType::class, array('attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px'), 'choices' => $output))
        ->add('team', ChoiceType::class, array('attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px'), 'choices' => $nbat))
        ->add('save', SubmitType::class, array('label' => "Create",'attr' => array('class' => 'btn btn-success', 'style' => 'margin-bottom:15px')))
        ->getForm();
        $form->handleRequest($request);
        if($form->isSubmitted() && $form->isValid())
    

    3)Insert into multiple tables.

        {
    
            $site_id = $form['site_id']->getData();
            $category = $form['category']->getData();
            $team = $form['team']->getData();
    
    
    
    
            $site->setSiteId($site_id);
            $site->setCategory($category);
            $nba->setWinner($team);
    

    4)Persist data

                $em = $this->getDoctrine()->getManager();
                $em->persist($site);
                $em->persist($nba);
                $em->flush();
    
    0 讨论(0)
  • 2020-12-08 21:52

    I took a look into the code of the "save" method of the Doctrine (1.2.x) "Collection.php" and all I saw is something like this:

    foreach ($this->getData() as $key => $record) {
       $record->save($conn);
    }
    

    How should this ever insert all records with one mysql INSERT?

    0 讨论(0)
提交回复
热议问题