Zend framework Zend_Db-构建删除查询

Zend framework Zend_Db-构建删除查询,zend-framework,zend-db,Zend Framework,Zend Db,我正在尝试在Zend Framework中重新创建以下内容,但不确定如何执行: DELETE FROM mytablename WHERE date( `time_cre` ) < curdate( ) - INTERVAL 4 DAY 从mytablename中删除日期(`time\u cre`)delete($table,array)( 'date(time_cre)

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

DELETE FROM mytablename WHERE date( `time_cre` ) < curdate( ) - INTERVAL 4 DAY 
从mytablename中删除日期(`time\u cre`)
我的想法是:

$table = $this->getTable();
$db = Zend_Registry::get('dbAdapter');
$db->delete($table, array(
    'date(`time_cre`) < curdate() - interval 4'
));
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);
}
$table=$this->getTable();
$db=Zend_注册表::get('dbAdapter');
$db->delete($table,array)(
'日期('time_cre`)
这似乎正确吗

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


编辑:确认!很抱歉,我是从一个用于测试的SELECT中修改的,粘贴时没有正确更改语法。我已经编辑了这个示例来修复它。

解决了它

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);
}

现在点击:
http://myhost/thiscontroller/pruneold/
将删除这些条目。当然,任何点击该url的人都会删除条目,但我已经采取了示例中未包含的步骤来处理此问题。希望这对某人有所帮助。

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

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

$row->delete();
尝试: $db->delete($table,array)( 'date(time_cre)<?'=>新Zend_Db_Expr('curdate()-间隔4')
));

@rg88不清楚你需要删除什么。delete的语法是
delete FROM[table_name]
您使用的是什么dbms(我假设是mysql?)您的语法是非标准的,而且相当奇怪。如果只想从一列中删除数据,则应使用UPDATE并将该列设置为NULL、、、0等。DELETE专门用于删除整行,除非您的dbms支持我不熟悉的内容。从何处获得该语法:
DELETE[something]from table[where]
?MySQL、PostgreSQL或Oracle都没有使用该功能。在
DELETE
之后,您不需要任何东西,因为您删除的是整行,而不是列值。DELETE将删除整行,n@criticus@Matt@singles-我未能正确编辑示例。我已经更新了我的示例。。很抱歉。我假设,
$data
继承自
Zend\u Db\u Table\u Abstract
。因此,在您的
pruneOld
方法中,您可以使用
$this->getAdapter()
访问db适配器-您不必从注册表获取它。第二件事-在模型中,您还有方法
delete()
,它接受一个参数-
where
数组。此表单的问题是您正在处理两个查询,至少一个用于选择,一个用于删除)以执行删除操作。pdo delete操作接受相同的参数,并且只执行一个查询。