Zend Framework: How to delete a table row where multiple things are true?

亡梦爱人 提交于 2019-11-27 20:06:20

To extend on Jason W's answer:

Not exactly sure what the 3rd section is saying

That means you can do this:

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

And the adapter will quote everything for you.

I don't feel like the documentation is very clear though.

From the zend manual on delete():

If you omit the second argument, the result is that all rows in the database table are deleted.

If you provide an array of strings as the second argument, these strings are joined together as terms in an expression separated by AND operators.

If you provide an array of arrays as the second argument, the the values will be automatically quoted into the keys. These will then be joined together as terms, seperated by AND operators.

Not exactly sure what the 3rd section is saying, but the 2nd implies that you can do:

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

If you're in model which is extending class Zend_Db_Table_Abstract, you need to use different structure:

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);
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!