ZF2 Bulk insert using INSERT INTO .... SELECT 从 table 到相同的 table

ZF2 Bulk insert using INSERT INTO .... SELECT from a table to same table

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

我现有的 table 看起来像这样: CoID -- CatCode -- 类别名称

PP -- 自动 -- 自动

PP -- 山 -- Metro

PP -- 出租车 -- 出租车

我要运行这个SQL查询:

插入 expcatmaster select 'RY'、CatCode、来自 expcatmaster 的类别名称,其中 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 table 中 CoID 的实际值?已尝试 google 并在该论坛中进行了搜索,但似乎无法解决。

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

Zend\Db\Sql\Sql multiple batch inserts

MySQL 支持批量插入,但并非所有数据库都支持... 查看关于 link 的讨论。

对于这种情况,您可以执行原始 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();