2

Mage_Core_Model_Abstractを拡張するModelクラスがあります。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を使用しましたが、結果は得られませんでした。

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 に答える