2

我有扩展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 and catch 但没有给出任何结果。

4

1 回答 1

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()因为没有在任何地方使用的返回值

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

于 2013-01-22T16:57:45.470 回答