मैं मेज में एक बार save()
विधि बुला सिद्धांत में एकाधिक पंक्तियों कैसे डालूँ?सिद्धांत - सिर्फ एक को बचाने के साथ कई पंक्तियां सम्मिलित()
उत्तर
प्रत्येक रिकॉर्ड को Doctrine_Collection
पर संग्रह ऑब्जेक्ट पर save()
पर कॉल करें।
$collection = new Doctrine_Collection('tablename');
$collection->add($record1);
$collection->add($record2);
$collection->add($record3);
$collection->add($record4);
$collection->save();
यह केवल काम करता है अगर सभी रिकॉर्ड एक ही तालिका के लिए कर रहे हैं। अन्यथा आप भाग्य से बाहर हैं।
यहां एक और समाधान, सिद्धांत 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();
मुझे उलझन में डाल दें। आप कहते हैं कि नए रिकॉर्ड को चालू करने की कोई आवश्यकता नहीं है, लेकिन यह वही है जो आप अपने कोड में कर रहे हैं जब आप बार-बार कहते हैं '$ row = new My_Doctrine_Record();', है ना? –
ओप्स, मेरा मतलब था "प्रत्येक रिकॉर्ड को सहेजने की कोई ज़रूरत नहीं है"। मैं इसे बदल दूंगा –
मैं सिद्धांत (1.2.x) "Collection.php" की "बचाने" विधि के कोड में एक दृष्टि डाली और सभी मैंने देखा कि कुछ इस तरह है:
foreach ($this->getData() as $key => $record) {
$record->save($conn);
}
कैसे क्या यह कभी भी एक mysql INSERT के साथ सभी रिकॉर्ड डालना चाहिए?
Collection.php में आपका अंश '$ conn-> startInternalTransaction()' और '$ conn-> प्रतिबद्ध()' द्वारा लिपटा गया है। यह समझा सकता है। – Tapper
आपकी टिप्पणी के लिए धन्यवाद, लेकिन उदाहरण के लिए: MySQL MyISAM लेनदेन का समर्थन नहीं करता है ... –
आप 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) सभी तालिकाओं घोषित है। 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();
धन्यवाद, मैं के लिए सटीक क्या देख रहा था। –
यह सही है! 1000 पंक्तियों को डालने के बजाय 76 के बजाय केवल 3.8 ले गए !! – Populus
वैसे भी एक रिकॉर्ड डालने के लिए वैसे भी है और इसकी आईडी प्राप्त करें और बाकी इसे जोड़ें और अन्य सभी – Pramod