我这样做:
$data = array('coords' => $district->getCoords(),
'id' => $district->getId(),
'fid' => $district->getFid(),
'wijziging'=> $district->getWijziging(),
'nieuwnr' => $district->getNieuwnr(),
'naam' => $district->getNaam(),
'wijk' => $district->getWijk(),
'wijknr' => $district->getWijknr(),
'objectid' => $district->getObjectid(),
'area' => $district->getArea(),
'len' => $district->getLen(),
);
$this->_dbTable->insert($data);
_dbTable - >引用我的表'区'。
现在我想在插入数据之前先清除表格。
我该怎么做?
答案 0 :(得分:11)
如果确实需要截断表
,请尝试获取适配器$this->_dbTable->getAdapter()->query('TRUNCATE TABLE '.$this->_dbTable->info(Zend_Db_Table::NAME));
答案 1 :(得分:4)
尝试:
$this->_dbTable->delete("1=1");
应该照顾好你的问题。 1 = 1将匹配所有记录,从而删除它们。据我所知,在Zend_Db或PDO中没有截断方法。
@Rikesh正好花一点时间来审核faq之后你会得到更好的帮助。
答案 2 :(得分:4)
扩展Zend_Db_Table_Abstract并添加:
/**
* Remove all contents of the table
* @return this
*/
public function truncate()
{
$this->getAdapter()->query('TRUNCATE TABLE `' . $this->_name . '`');
return $this;
}
答案 3 :(得分:2)
如果您正在使用带有tableGateway的Zend Framework 2,那么该过程非常相似。
$query = $this->tableGateway->getAdapter()->query('TRUNCATE TABLE '.$this->tableGateway->getTable());
$query->execute();
答案 4 :(得分:0)
<?php
namespace MyNamespace\Db\Sql;
use Zend\Db\Adapter\ParameterContainer;
use Zend\Db\Adapter\Platform\PlatformInterface;
use Zend\Db\Adapter\Driver\DriverInterface;
use Zend\Db\Sql\AbstractPreparableSql;
use Zend\Db\Sql\TableIdentifier;
class Truncate extends AbstractPreparableSql
{
/**@#+
* @const string
*/
const SPECIFICATION_TRUNCATE = 'truncate';
/**@#-*/
/**
* @var string[]
*/
protected $specifications = [
self::SPECIFICATION_TRUNCATE => /* @lang SQL */ 'TRUNCATE TABLE %1$s',
];
/**
* @var string|TableIdentifier
*/
protected $table = '';
/**
* @param null|string|TableIdentifier $table
*/
public function __construct($table = null)
{
if ($table) {
$this->table($table);
}
}
/**
* @param string|TableIdentifier $table
* @return self
*/
public function table($table)
{
$this->table = $table;
return $this;
}
/**
* @param PlatformInterface $platform
* @param DriverInterface|null $driver
* @param ParameterContainer|null $parameterContainer
* @return string
*/
protected function processTruncate(PlatformInterface $platform, DriverInterface $driver = null, ParameterContainer $parameterContainer = null)
{
return sprintf(
$this->specifications[static::SPECIFICATION_TRUNCATE],
$this->resolveTable($this->table, $platform, $driver, $parameterContainer)
);
}
}
$truncate = new Truncate('table');
return $this->getSql()->prepareStatementForSqlObject($truncate)->execute();
答案 5 :(得分:0)
在具有tableGateway的Zend Framework 2/3的情况下:
$adapter = $this->tableGateway->getAdapter();
$sql = 'TRUNCATE TABLE '.$this->tableGateway->getTable();
//Or,
$sql = 'DELETE FROM '.$this->tableGateway->getTable();
$adapter->query($sql)->execute();
// Or,
$adapter->createStatement($sql)->execute();