開発版において、以下のチェンジセットでも doDelete が変更されておりました。その場合は次のようになるかと思います。
http://svn.ec-cube.net/open_trac/changeset/22582■LC_Page_Admin_Products
// ▼1行追加、2行変更
function doDelete($where, $arrParam = array())
{
$objQuery =& SC_Query_Ex::getSingletonInstance();
$arrProductIds = $objQuery->getCol('product_id', "dtb_products", $where, $arrParam); // <-- ★$arrRetを$arrProductIdsに変更
$product_ids = array();
foreach ($arrProductIds as $value) { // <-- ★$arrRetを$arrProductIdsに変更
$product_ids[] = $value['product_id'];
}
$sqlval['del_flg'] = 1;
$sqlval['update_date'] = 'CURRENT_TIMESTAMP';
$objQuery->begin();
$objQuery->update('dtb_products_class', $sqlval, "product_id IN (SELECT product_id FROM dtb_products WHERE $where)", $arrParam);
$objQuery->delete('dtb_customer_favorite_products', "product_id IN (SELECT product_id FROM dtb_products WHERE $where)", $arrParam);
$objRecomment = new SC_Helper_Recommend_Ex();
$objRecomment->deleteByProductIDs($product_ids);
$this->lfDeleteProductCategories($arrProductIds); // <-- ★追加
$objQuery->update('dtb_products', $sqlval, $where, $arrParam);
$objQuery->commit();
}
// ▼新規追加
/**
* 商品カテゴリから削除対象商品のレコードを削除
*
* @param array $arrProductIds 商品IDの配列
* @return void
*/
function lfDeleteProductCategories($arrProductIds) {
$objQuery =& SC_Query_Ex::getSingletonInstance();
$objDb = new SC_Helper_DB_Ex();
foreach ($arrProductIds as $product_id) {
// 登録されているカテゴリ情報を取得
$arrCurrentCat = $objQuery->getCol('category_id', 'dtb_product_categories', 'product_id = ?', array($product_id));
// 登録されているカテゴリからレコード削除
foreach ($arrCurrentCat as $category_id) {
$objDb->removeProductByCategories($category_id, $product_id);
}
}
}
申し訳ありませんが、こちらのバージョンでは動作確認までは行えておりませんのでご了承ください。
# 話がズレますが、上記 doDelete内の $objRecomment->deleteByProductIDs から
# $objDb->sfDeleteRankRecord が呼ばれており、ここで再度トランザクションを張っているのですが
# 問題ないでしょうか。