2013-06-26 19 views
6

Chciałbym wiedzieć, czy istnieje sposób wstawiania wielu wierszy w ZF2 przy użyciu tylko jednego obiektu $ sql (i nie przy użyciu metody kwerendy (SQL COMMAND)).ZF2 wstawianie wielu wierszy

Próbowałem coś takiego, ale to nie działa:

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(); 
} 

Próbuje wstawić wartości w bazie danych z dwóch kolumn (id_agent, id_projet)

+1

Nie będzie to ogólny sposób to zrobić za pomocą abstrakcji bazy danych, jak wiele wkładek to funkcja MySQL, a nie standardowy typ SQL z wkładki. – Andrew

+0

Dzięki za odpowiedź (przepraszam za bardzo późną odpowiedź). Znalazłem lepsze rozwiązanie, aby rozwiązać mój problem w tym przypadku jest użycie transakcji zf2 sql. – aramir

+0

Tak, po użyciu transakcji zf2 sql, należy przekazać parametr "set" w wartości(), np. $ insert -> into ($ this-> tableGateway-> getTable()) -> wartości (wartości $, "zestaw"); – prava

Odpowiedz

4

nie ma rodzajowe sposobem multyinsert w ZF2 ALE jeśli używasz mysql i nie planujesz zmiany na inne bazy danych, napisałem dla mnie funkcję multiInsert:

$data to tablica tablic par klucz, wartość.

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

Działa jak urok .... Wielkie dzięki! –

Powiązane problemy