TRUNCATE表+ Zend框架

时间:2013-01-21 15:59:16

标签: php sql database zend-framework

我这样做:

$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 - >引用我的表'区'。

现在我想在插入数据之前先清除表格。

我该怎么做?

6 个答案:

答案 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();