2013-06-26 18 views
6

ZF2に複数の行を挿入する方法が1つの$ 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(); 
} 

2列(id_agent, id_projet)でデータベースに値を挿入しようと

+1

複数の挿入はMySQLの機能であり、標準SQLタイプの挿入ではないため、データベース抽象化を使用してこれを行う一般的な方法はありません。 – Andrew

+0

お返事ありがとうございます(ご返信ありがとうございます)。このケースでは、私の問題を解決するためのより良い解決策がzf2 SQLトランザクションを使用することです。 – aramir

+0

はい、zf2 sqlトランザクションを使用した後、 $ insert - > into($ this-> tableGateway-> getTable()) - > values($ values、 'set'); – prava

答えて

4

ZF2でmultyinsertのための一般的な方法はありませんしかし、mysqlを使用していて他のデータベースに変更するつもりがない場合は、私自身のためにmultiInsert関数を書いています。

$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

魅力的な作品....ありがとう! –

関連する問題