2011-03-24 8 views

उत्तर

30

प्रत्येक रिकॉर्ड को Doctrine_Collection पर संग्रह ऑब्जेक्ट पर save() पर कॉल करें।

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

यह केवल काम करता है अगर सभी रिकॉर्ड एक ही तालिका के लिए कर रहे हैं। अन्यथा आप भाग्य से बाहर हैं।

+0

धन्यवाद, मैं के लिए सटीक क्या देख रहा था। –

+11

यह सही है! 1000 पंक्तियों को डालने के बजाय 76 के बजाय केवल 3.8 ले गए !! – Populus

+0

वैसे भी एक रिकॉर्ड डालने के लिए वैसे भी है और इसकी आईडी प्राप्त करें और बाकी इसे जोड़ें और अन्य सभी – Pramod

3

यहां एक और समाधान, सिद्धांत 1.2 पर परीक्षण किया गया। प्रत्येक रिकॉर्ड को सहेजने की कोई ज़रूरत नहीं है, फ्लश() स्वचालित रूप से सभी सहेजे गए उदाहरणों को पाता है और उन्हें सब बचाता है।

$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

मुझे उलझन में डाल दें। आप कहते हैं कि नए रिकॉर्ड को चालू करने की कोई आवश्यकता नहीं है, लेकिन यह वही है जो आप अपने कोड में कर रहे हैं जब आप बार-बार कहते हैं '$ row = new My_Doctrine_Record();', है ना? –

+0

ओप्स, मेरा मतलब था "प्रत्येक रिकॉर्ड को सहेजने की कोई ज़रूरत नहीं है"। मैं इसे बदल दूंगा –

0

मैं सिद्धांत (1.2.x) "Collection.php" की "बचाने" विधि के कोड में एक दृष्टि डाली और सभी मैंने देखा कि कुछ इस तरह है:

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

कैसे क्या यह कभी भी एक mysql INSERT के साथ सभी रिकॉर्ड डालना चाहिए?

+1

Collection.php में आपका अंश '$ conn-> startInternalTransaction()' और '$ conn-> प्रतिबद्ध()' द्वारा लिपटा गया है। यह समझा सकता है। – Tapper

+1

आपकी टिप्पणी के लिए धन्यवाद, लेकिन उदाहरण के लिए: MySQL MyISAM लेनदेन का समर्थन नहीं करता है ... –

3

आप symfony2 का उपयोग करते हैं यह इतना आसान

// 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(); 
1

1) सभी तालिकाओं घोषित है। 2) फॉर्म बनाएं। 3) एकाधिक तालिकाओं को भेजें। 4) डेटा जारी रखें।

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

1) सभी तालिकाओं को घोषित करें।

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

2) प्रपत्र

$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) एकाधिक तालिकाओं में सम्मिलित करें बनाएँ।

{ 

     $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) भी बनी रहती डेटा

  $em = $this->getDoctrine()->getManager(); 
      $em->persist($site); 
      $em->persist($nba); 
      $em->flush();