2013-01-21 91 views
3

我這樣做:截斷表+ Zend框架

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

現在我想在插入數據之前先清除表格。

我該怎麼做?

回答

11

試圖讓適配器,如果你確實需要截斷表

$this->_dbTable->getAdapter()->query('TRUNCATE TABLE '.$this->_dbTable->info(Zend_Db_Table::NAME)); 
+2

+1這通常比'DELETE ... WHERE 1 = 1'快得多。 –

+0

像完美的作品!謝謝! – nielsv

4

嘗試:

$this->_dbTable->delete("1=1"); 

應該把你的問題的關心。 1 = 1將匹配所有記錄,從而刪除它們。就我所知,Zend_Db或PDO中沒有截斷方法。

@瑞克斯是正確的需要花一些時間審查faq後,你會得到更好的幫助。

+0

當我做到這一點: $本 - > _ dbTable->刪除( 「1 = 1」); $ this - > _ dbTable-> insert($ data); 當我檢查我的數據庫時,我發現它只有最後一行... – nielsv

+0

那麼它應該在那裏,如果你刪除後插入它?我認爲這會消除桌子上的一切。您必須在刪除後插入。 – Iznogood

3

擴展Zend_Db_Table_Abstract並添加:

/** 
* Remove all contents of the table 
* @return this 
*/ 
public function truncate() 
{ 
    $this->getAdapter()->query('TRUNCATE TABLE `' . $this->_name . '`'); 

    return $this; 
} 
1

如果您正在使用Zend Framework 2 tableGateway,這個過程是非常類似。

$query = $this->tableGateway->getAdapter()->query('TRUNCATE TABLE '.$this->tableGateway->getTable()); 
    $query->execute(); 
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();