Zend Framework: Как удалить строку таблицы, в которой верно несколько вещей?

Обычно это сработает для меня:

$db = Zend_Db_Table::getDefaultAdapter();
$where = $db->quoteInto('id = ?', $id);
$db->delete('tablename', $where);

но мне нужно сопоставить два идентификатора. Так что я действительно не знаю, как это структурировать.

WHERE first_id = 'id1' AND second_id = 'id2'

Итак, как мне сделать это с помощью Zend Framework?


person Andrew    schedule 04.12.2009    source источник


Ответы (3)


Чтобы продолжить ответ Джейсона В.

Не совсем уверен, что говорится в 3-м разделе

Это означает, что вы можете сделать это:

$db->delete('tablename', array(
    'first_id = ?' => $first_id,
    'second_id = ?' => $second_id
));

А адаптер все за вас процитирует.

Однако мне не кажется, что документация очень ясна.

person smack0007    schedule 04.12.2009
comment
Всегда проверяйте API - руководство просто не может охватить все достаточно подробно - person David Snabel-Caunt; 04.12.2009
comment
API, который заставляет вас перепроектировать его, чтобы делать простые вещи, - дрянной API. - person Alan Storm; 31.12.2009
comment
Именно @AlanStorm, чтобы действительно использовать Zend Framework, вам действительно нужно погрузиться в исходный код. Делает для крутого и разочаровывающего обучения. - person David; 01.08.2013

Из руководства по zend на Удалить():

Если вы опустите второй аргумент, в результате будут удалены все строки в таблице базы данных.

Если вы предоставляете массив строк в качестве второго аргумента, эти строки объединяются как термины в выражении, разделенном операторами AND.

Если вы предоставите массив массивов в качестве второго аргумента, значения будут автоматически заключены в кавычки в ключах. Затем они будут объединены в термины, разделенные операторами AND.

Не совсем уверен, что говорится в третьем разделе, но второй подразумевает, что вы можете:

$where = array();
$where[] = $db->quoteInto('first_id = ?', $first_id);
$where[] = $db->quoteInto('second_id = ?', $second_id);
$db->delete('tablename', $where);
person Justin W    schedule 04.12.2009
comment
Это лучший способ сделать это! - person markus; 09.06.2011

Если вы используете модель, расширяющую класс Zend_Db_Table_Abstract, вам необходимо использовать другую структуру:

class Yourmodel extends Zend_Db_Table_Abstract {
    protected $_name = 'tablename';
    protected $_primary = 'primarykey';
    public function remove($first_id, $second_id) {
        $where = array();
        $where[] = $this->getAdapter()->quoteInto('first_id = ?', $first_id);
        $where[] = $this->getAdapter()->quoteInto('second_id = ?', $second_id);
        $this->delete($where);
    }
}
person sanneo    schedule 03.09.2013