Zend Framework: Как удалить строку таблицы, в которой верно несколько вещей? - PullRequest
24 голосов
/ 04 декабря 2009

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

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

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

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

Так как мне это сделать с Zend Framework?

Ответы [ 3 ]

58 голосов
/ 04 декабря 2009

В продолжение ответа Джейсона У:

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

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

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

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

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

20 голосов
/ 04 декабря 2009

Из руководства Zend при удалении ():

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

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

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

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

$where = array();
$where[] = $db->quoteInto('first_id = ?', $first_id);
$where[] = $db->quoteInto('second_id = ?', $second_id);
$db->delete('tablename', $where);
1 голос
/ 03 сентября 2013

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