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?
Ответы
Ответ 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);
}
}