理由あって、EC-CUBEの商品登録処理をハックすることになりました。
別のアプリケーションで生成した商品情報を利用して、EC-CUBEの商品を作成するというものです。
EC-CUBEにはCSVから商品登録する機能もあるのですが、登録後にEC-CUBE側のproduct_id、product_class_idも取得したいので、手間を減らすために登録処理を作っちまおうというわけです。
で、EC-CUBEのソースを読んでみたのですが、商品の登録処理はこんな感じのようです。
商品登録時に更新されるテーブル
商品情報
dtb_products
商品カテゴリ関連
dtb_product_categories
商品ステータス情報
dtb_product_status
商品規格情報
dtb_products_class
カテゴリ商品数情報
dtb_category_count
カテゴリ商品合計数情報
dtb_cateory_total_count
商品登録の処理
// パラメーター初期化, 取得
↓LC_Page_Admin_Products_Product.php actionメソッド
$this->lfInitFormParam
$this->lfGetFormParam_Complete
// エラーチェック
$this->lfCheckError_Edit
// DBへデータ登録
$this->lfRegistProduct
// 次のシーケンス(次のID)を取得
$objQuery->nextVal("dtb_products_product_id");
// Insertの実行
// カテゴリを更新
$objDb->updateProductCategories($arrList['category_id'], $product_id);
// 商品登録の時は規格を生成する。複製の場合は規格も複製されるのでこの処理は不要。
// 規格登録
// 規格なし商品(商品規格テーブルの更新)
$this->lfInsertDummyProductClass($arrList);
// 商品ステータス設定
$objProduct = new SC_Product_Ex();
$objProduct->setProductStatus($product_id, $arrList['product_status']);
// 件数カウントバッチ実行
$objQuery =& SC_Query_Ex::getSingletonInstance();
$objDb = new SC_Helper_DB_Ex();
$objDb->sfCountCategory($objQuery);
$objDb->sfCountMaker($objQuery);
ただ、これ以外にも
dtb_products_class_product_class_id_seq
dtb_products_product_id_seq
のauto_incrementが更新されていたり、
mtb_constantsが追加されたりと、よくわからないところもあるのでMySQLのクエリログを取ってチェックすることにしました。
MySQLのクエリログを保存する
相変わらず前置きが長いですね。ここからが本題です。
MySQLのクエリログを保存するには、
Windows(Xampp)の場合は「C:\xampp\mysql\bin\my.ini」
Linux(さくらVPS、CentOSでMySQLをyumインストール)の場合は、「/etc/my.cnf」
にログの保存先を追加します。
[mysqld]のセクションに追加します。
#Windowsの場合(パスをクォートする必要がある) log="C:\xampp\mysql\data\query.log" #CentOSの場合 log=/var/log/mysql/query.log
その後、MySQLを再起動すればOKです。
ちなみにWindowsの場合は、ログファイルのパスをクォート必要があるようです。
