我有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但没有给出任何结果。
答案 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集合检查它的存在。