我正在尝试在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'
));
这看起来是否正确?
处理这样的事情的最佳方法是什么?
答案 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') ));