ZF2批量插入使用INSERT INTO .... SELECT从表到同一个表

时间:2015-06-02 01:58:22

标签: php zend-framework2 bulkinsert insert-into

我正在尝试将表中的某些记录批量复制到同一个表中,并更改了一个字段。但我无法在ZF2中找到正确的方法。

我现有的表格如下: CoID - CatCode - CategoryName

PP - 自动 - 自动

PP - Mt - Metro

PP - 出租车 - 出租车

我想运行此SQL查询:

插入expcatmaster 从expcatmaster中选择' RY',CatCode,CategoryName,其中CoID =' PP'

我无法找到一种方法来放置常数' RY'进入代码(使用ZF2)。 我的CopyCategoryTable.php中的代码如下:

public function insCategory($FromCoID, $ToCoID) {
    $SelCol = array(
        'CoID',
        'CatCode',
        'CategoryName',
    );

    $adapter = $this->tableGateway->getAdapter();
    $sql = new Sql($adapter);
    $SelQry =$sql->select();
    $SelQry->columns($SelCol);
    $SelQry->from('ExpcatMaster');
    $SelQry->where(array('CoID' => $FromCoID));
    echo $SelQry->getSqlString();

    $InsQry = $sql->insert();
    $InsQry->into('ExpcatMaster');
    $InsQry->select($SelQry);
    $InsData = $sql->prepareStatementForSqlObject($InsQry);
    echo $InsQry->getSqlString();

    $this->tableGateway = $InsData->execute();

}

如何使用已传递给函数的$ ToCoID替换select表中的CoID的实际值?尝试谷歌并在这个论坛搜索,但似乎无法解决。

1 个答案:

答案 0 :(得分:1)

在ZF(Zend \ Db)中没有批量插入的方法, 所以你必须为此编写一个方法。

Zend\Db\Sql\Sql multiple batch inserts

MySQL中支持批量插入,但并非所有数据库都支持... 检查链接上的讨论。

您可以针对这种情况执行原始SQL查询:

$parameters = ['name 1', 'desc 1', 'name 2', 'desc 2'];
$sql        = 'INSERT INTO table (name, description) VALUES (?, ?), (?, ?);';
$resultSet  = $this->adapter->query($sql, $parameters);

return $resultSet->getAffectedRows();