Подтвердить что ты не робот

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?

4b9b3361

Ответ 1

Чтобы продлить на Jason W ответ:

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

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

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

А адаптер будет указывать все для вас.

Я не чувствую, что документация очень ясна, хотя.

Ответ 2

Из руководство zend в файле delete():

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

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

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

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

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

Ответ 3

Если вы находитесь в модели, расширяющей класс 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);
    }
}