Zend_Db - Построение запроса на удаление - PullRequest
0 голосов
/ 03 марта 2011

Я пытаюсь воссоздать следующее в 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 ]

2 голосов
/ 04 марта 2011

Разобрался ...

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, удалит записи, но я предпринял шаги, не включенные в мой пример, чтобы справиться с этим.Надеюсь, это кому-нибудь поможет.

0 голосов
/ 14 ноября 2013

try: $ db-> delete ($ table, array ('date (time_cre) <?' => New Zend_Db_Expr ('curdate () - интервал 4')));

0 голосов
/ 04 марта 2011

Обычно я делаю это, чтобы удалить строку

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

$row->delete();
...