2013-06-26 11 views
6

मैं जानना चाहता हूं कि ZF2 में केवल एक $ sql ऑब्जेक्ट (और क्वेरी (SQL COMMAND) विधि का उपयोग नहीं कर रहा है) में एकाधिक पंक्ति डालने का कोई तरीका है या नहीं।ZF2 एकाधिक पंक्तियों को सम्मिलित करें

मैं कुछ इस तरह की कोशिश की, लेकिन यह काम नहीं करता है:

public function setAgentProjectLink($IDProject , $IDsAgents) 
{ 
    $values = array() ; 
    foreach ($IDsAgents as $IDAgent): 
    { 
     $values[] = array ('id_agent' => $IDAgent , 'id_projet' => $IDProject) ; 
    } endforeach ; 

    $sql = new Sql($this->tableGateway->adapter) ; 
    $insert = $sql->insert() ; 

    $insert -> into ($this->tableGateway->getTable()) 
      -> values ($values) ; 

    $statement = $sql->prepareStatementForSqlObject($insert); 
    $result = $statement->execute(); 
} 

दो कॉलम (id_agent, id_projet)

+1

डाटाबेस अबास्ट्रक्शन का उपयोग करके ऐसा करने का एक सामान्य तरीका नहीं होने वाला है क्योंकि एकाधिक आवेषण एक MySQL सुविधा है, और मानक SQL प्रकार का सम्मिलन नहीं है। – Andrew

+0

प्रतिक्रिया देने के लिए धन्यवाद (बहुत देर से उत्तर के लिए खेद है)। मैंने पाया कि इस मामले में मेरी समस्या को हल करने के लिए बेहतर समाधान zf2 sql लेनदेन का उपयोग करना है। – aramir

+0

हां, zf2 sql लेनदेन का उपयोग करने के बाद, आपको $ insert -> में ($ this-> tableGateway-> getTable()) -> मान ($ मान, 'सेट') ; – prava

उत्तर

4

के साथ एक डेटाबेस में मान डालने के लिए वहाँ ZF2 में multyinsert के लिए कोई सामान्य तरीका है की कोशिश कर रहा लेकिन अगर आप mysql का उपयोग कर रहे हैं और अन्य डेटाबेस में बदलने की योजना नहीं बना रहे हैं, तो मैंने अपने लिए एक बहुआयामी कार्य लिखा है:

$data कुंजी, मूल्य जोड़े के सरणी की एक सरणी है।

protected function multiInsert($table, array $data) 
    { 
     if (count($data)) { 
      $columns = (array)current($data); 
      $columns = array_keys($columns); 
      $columnsCount = count($columns); 
      $platform = $this->db->platform; 
      array_filter($columns, function ($index, &$item) use ($platform) { 
       $item = $platform->quoteIdentifier($item); 
      }); 
      $columns = "(" . implode(',', $columns) . ")"; 

      $placeholder = array_fill(0, $columnsCount, '?'); 
      $placeholder = "(" . implode(',', $placeholder) . ")"; 
      $placeholder = implode(',', array_fill(0, count($data), $placeholder)); 

      $values = array(); 
      foreach ($data as $row) { 
       foreach ($row as $key => $value) { 
        $values[] = $value; 
       } 
      } 


      $table = $this->db->platform->quoteIdentifier($table); 
      $q = "INSERT INTO $table $columns VALUES $placeholder"; 
      $this->db->query($q)->execute($values); 
     } 
    } 
+0

एक आकर्षण की तरह काम करता है .... बहुत बहुत धन्यवाद! –

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