Zend_Db - 构建删除查询

时间:2011-03-03 18:57:53

标签: zend-framework zend-db

我正在尝试在Zend Framework中重新创建以下内容,但我不确定如何操作:

DELETE FROM mytablename WHERE date( `time_cre` ) < curdate( ) - INTERVAL 4 DAY 

我在想这样的事情:

$table = $this->getTable();
$db = Zend_Registry::get('dbAdapter');
$db->delete($table, array(
    'date(`time_cre`) < curdate() - interval 4'
));

这看起来是否正确?

处理这样的事情的最佳方法是什么?


编辑:Ack!对不起,我正在使用我正在使用的SELECT进行调整,并且在粘贴时没有正确更改语法。我编辑了示例来修复它。

3 个答案:

答案 0 :(得分:2)

想出来......

public function pruneOld($days) {
    $table = $this->getTable();
    $db = Zend_Registry::get('dbAdapter');
    $where = $db->quoteInto("DATE(`time_cre`) < CURDATE() - INTERVAL ? DAY", $days);

    return $table->delete($where);
}

$table获取我要编辑的表的引用...

$db抓取数据库适配器的实例,以便我可以使用quoteInto() ...

$where构建了接受$days的查询的主要部分,以使事情更加灵活。

创建一个动作来调用此方法......类似于:

public function pruneoldAction() {

    // Disable the view/layout stuff as I don't need it for this action
    $this->_helper->layout()->disableLayout();
    $this->_helper->viewRenderer->setNoRender(true);

    // Get the data model with a convenience method
    $data = $this->_getDataModel();

    // Prune the old entries, passing in the number of days I want to be older than
    $data->pruneOld(2);
}

现在点击:http://myhost/thiscontroller/pruneold/将删除条目。当然,任何打到该URL的人都会删除这些条目,但我已经采取了我的例子中没有包含的步骤来处理这个问题。希望这有助于某人。

答案 1 :(得分:0)

我通常这样做是为了删除一行

$table = new yourDB;
$row = $table->fetchRow($table->select()->where(some where params));

$row->delete();

答案 2 :(得分:0)

尝试:     $ db-&gt; delete($ table,array(         'date(time_cre)&lt; ? =&GT; new Zend_Db_Expr('curdate() - interval 4')     ));