2011-08-13 19 views
5

मेरे पास दो टेबल Accommodation और Facility हैं, जो एक तीसरी तालिका, Accommodation_facility के साथ कई से अधिक रिश्तों में जुड़े हुए हैं।आप एक ही समय में एक टेबल में एकाधिक रिकॉर्ड कैसे डालते हैं?

  • निवास (accommodation_id, Accommodation_Type, नाम)
  • सुविधा (facility_id, facility_name)
  • Accommodation_facility (accommodation_id, facility_id)

Yii का उपयोग करना, कैसे क्या आप डेटा के कई रिकॉर्डमें डाल सकते हैंतालिका?

उत्तर

-2

चूंकि आपका प्रश्न "yii" में टैग किया गया है, मुझे लगता है कि आप वाईआई फ्रेमवर्क का उपयोग कर रहे हैं। दस्तावेज़ों पर सक्रिय रिकॉर्ड्स पर एक नज़र डालें - http://www.yiiframework.com/doc/guide/1.1/en/database.ar

अपनी तालिकाओं के लिए एआर कक्षाएं सेट करने के लिए दस्तावेज़ों का पालन करें, और जब आप अपनी चेकबॉक्स सूची सबमिट करते हैं तो बस उस पोस्ट पर लूप करें। इस लूप में आप उन तालिकाओं के लिए एआर ऑब्जेक्ट्स बनाते हैं, पॉप्युलेट करते हैं और सहेजते हैं जिन्हें आप डेटा डालना चाहते हैं।

0
foreach($facilities as $facility) 
{ 
    $model = new Model; 
    $model->attributes = $facility // or $model->column = $facility 
    if ($model->validate()) 
     $model->save() 
} 
+0

केवल एक रिकॉर्ड सम्मिलित किया जाएगा। शायद आखिरी एक। –

+3

लूप में एकाधिक रिकॉर्ड जोड़ने के लिए '$ model-> isNewRecord = true' होना चाहिए। –

11

लूप का उपयोग करके सम्मिलन बहुत धीमा है। आइए मान लें कि आपके पास 5000 पंक्तियां डालने के लिए हैं, इसमें लगभग 6 मिनट लगेंगे (प्रत्येक रिकॉर्ड के लिए अलग डालें)। यह किसी एक क्वेरी के साथ डेटा सम्मिलित करने के लिए बेहतर है:

$values = '(null, "your string"), (null, "next string"), (null, "third string")'; 
$sql = 'INSERT INTO table_data (id, data) VALUES ' . $values; 
$command = Yii::app()->db->createCommand($sql); 
$command->execute(); 

कि ले जाएगा समय की 1/10।

+0

बेहतर समाप्ति एसक्यूएल इंजेक्शन को रोकने के लिए '$ कमांड-> बाइंडवैल्यू' और प्लेसहोल्डर्स का कच्चा डेटा उपयोग करना है। – FelikZ

2

एसक्यूएल इंजेक्शन से बचने के लिए आपको बेहतर तरीके से बाइंडपैम का उपयोग करना होगा। मुझे नहीं पता कि यह करने का सबसे अच्छा तरीका है, लेकिन मैं यह तरीका कर रहा हूं:

$values = array(array(1,2),array(3,4),array(5,6),); 
$nbValues = count($values); 
$sql = 'INSERT INTO table_name (col_name1, col_name2) VALUES '; 
for ($i=0; $i < $nbValues; $i++) { 
    $sql .= '(:col1_'.$i.', :col2_'.$i.')'; 
    if ($i !== ($nbValues-1)) 
     $sql .= ','; 
} 
$command = Yii::app()->db->createCommand($sql); 
for ($i=0; $i < $nbValues; $i++) { 
    $command->bindParam(':col1_'.$i, $values[$i][0], PDO::PARAM_INT); 
    $command->bindParam(':col2_'.$i, $values[$i][1], PDO::PARAM_INT); 
} 
$command->execute(); 

आशा है कि इससे मदद मिलती है!

संबंधित मुद्दे