Magento模型删除功能

时间:2013-01-22 16:32:47

标签: magento model

我有Model类,它扩展了 Mage_Core_Model_Abstract 。我有一个扩展 Mage_Core_Model_Mysql4_Abstract 的资源。现在我使用以下代码从控制器中删除:

public function deleteAction()
{
    $params = $this->getRequest()->getParams();
    $blogpost = $this->_createModel();
    $blogpost->setId($params['id']);
    $blogpost->delete();
    echo 'Post with id ' . $params['id'] . ' is deleted';
}

问题是当我提供不存在的 ID时没有显示错误。该怎么办 ?我是否必须加载该ID并检查它是否存在?或者我应该使用 try / catch 。我用try和catch但没有给出任何结果。

1 个答案:

答案 0 :(得分:3)

当然它不会抛出异常,DELETE语句最终会在没有错误的情况下执行,它只有一个受影响的行数为0.

不幸的是,这里的行数会丢失(Mage_Core_Model_Resource_Db_Abstract):

/**
 * Delete the object
 *
 * @param Varien_Object $object
 * @return Mage_Core_Model_Resource_Db_Abstract
 */
public function delete(Mage_Core_Model_Abstract $object)
{
    $this->_beforeDelete($object);
    $this->_getWriteAdapter()->delete(
        $this->getMainTable(),
        $this->_getWriteAdapter()->quoteInto($this->getIdFieldName() . '=?', $object->getId())
    );
    $this->_afterDelete($object);
    return $this;
}

因为_getWriteAdapter()->delete()的返回值未在任何地方使用

看起来您确实必须在删除模型之前加载模型,或者至少通过ressource集合检查它的存在。