2016-12-07 15 views
2

Я работаю над приложением с использованием среды Zend 2. Я использую TableGateway для выбора, вставки, обновления и удаления запроса.Как распечатать точный sql-запрос перед выполнением в Zend Framework 2

1. Мой вопрос заключается в том, как распечатать точный sql-запрос перед выполнением инструкций INSERT, UPDATE и DELETE? Для SELECT заявление здесь - мой код, который работает для меня.

$selectedTable = new TableGateway($this->tblName, $this->dbAdapter); 
$sql = $selectedTable->getSql(); 
$select = $sql->select(); 

if ($trace) { 
    echo "<br>" . $sql->getSqlstringForSqlObject($select) . "<br>"; 
    exit; 
} 
else { 
    $resultSet = $selectedTable->selectWith($select); 
    unset($selectedTable); 
    return $resultSet; 
} 

2. Для последнего вставленной ид Я использую этот код и работает отлично.

$selectedTable = new TableGateway($this->tblName, $this->dbAdapter); 
$selectedTable->insert($dataArray); 
$insertId = $selectedTable->adapter->getDriver()->getConnection()->getLastGeneratedValue(); 
unset($selectedTable); 
return $insertId; 

Но для UPDATE как получить последний обновленный идентификатор? и для УДАЛИТЬ как получить поврежденную строку? Потому что для UPDATE и DELETE этот код не работает.

Может ли кто-нибудь предложить, как это сделать?

ответ

2

1. Не должно быть никакой разницы или затруднений, сделайте это exaccty таким же образом на вашем объекте $insert. Вот как я выполнить Sql вставку и получить SQL строку:

$sql = new Sql($this->dbAdapter); 
$insert = $sql->insert('table'); 
[...] 
$sqlString = $insert->getSqlString($this->dbAdapter->getPlatform()); 

2. При установке значения, вы не знаете, что будет генерироваться значение id перед установкой, но вы будете знать только его Атера вставки. Вот почему существует метод getLastGeneratedValue-) для вставленных значений.

Но когда вы обновляете или удаляете значение, его id уже определен, и вы можете его прочитать. Итак, все, что вам нужно сделать, это прочитать его из своей базы данных. Выполните выбор перед обновлением или удалением объектов (ов), и вы узнаете все необходимые идентификаторы.

+0

Спасибо за ваш ответ. Можете ли вы рассказать мне, как использовать getaffectedrows() с обновлением и удалением с помощью TableGateway? – anil