Массовая вставка ZF2 с использованием INSERT INTO SELECT из таблицы в ту же таблицу

Я пытаюсь сделать массовое копирование некоторых записей из таблицы в ту же таблицу с одним измененным полем. Но я не могу найти правильный метод в ZF2 для этого.

Моя существующая таблица выглядит так: CoID -- CatCode -- CategoryName

ПП -- авто -- Авто

PP -- Mt -- Метро

ПП -- Такси -- Такси

Я хочу запустить этот SQL-запрос:

вставьте в expcatmaster выберите «RY», CatCode, CategoryName из 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();

}

Как заменить фактическое значение CoID из таблицы выбора на $ToCoID, которое я передал функции? Пробовал гуглить и искать на этом форуме, но не могу найти.


person Saswata Banerjee    schedule 02.06.2015    source источник


Ответы (1)


В ZF (Zend\Db) нет метода массовой вставки, поэтому для этого вам нужно написать метод.

Множественные пакетные вставки Zend\Db\Sql\Sql

Массовая вставка поддерживается в 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();
person tasmaniski    schedule 02.06.2015
comment
Привет. Не будет ли это медленным, если у нас есть большое количество строк для копирования из одной таблицы в другую? В моем коде SQL-запрос (его MySQL) генерируется правильно, но не выполняется. Я могу взять тот же запрос и запустить его в диспетчере запросов в phpmyadmin, он работает. Но в ZF2 он не выполняется. - person Saswata Banerjee; 02.06.2015
comment
Хорошо, я использовал необработанный SQL-запрос и вставил Insert Into... Выберите запрос, чтобы выполнить массовую вставку. Спасибо, что указали выход. - person Saswata Banerjee; 04.06.2015
comment
Не могу понять, как одобрить. (извините, я новичок в stackoverflow) - person Saswata Banerjee; 05.06.2015