1

作成した最初の Web サイトから、後でマルチストア設定で追加した別の 23 の Web サイトに製品をコピーしようとしています。私は仕事をするべきだと思ったこのコードを持っています:

$arr_stores = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24);
$store_from = 1;  // first store id

// get observer data and process each imported simple product - my products that need to be copied to     other websites
    $_event = $observer->getEvent();
    $_adapter = $_event->getAdapter();

    foreach($_adapter->getNewSku() as $sku => $value) {

        if($value['type_id'] == 'simple'){
            // load the next product - this loads product correctly
            $_product = Mage::getModel('catalog/product')->setStoreId($store_from)->load($value['entity_id']);

                   // set the websites
            $_product->setWebsiteIds($arr_stores);
            $_product->save();

                    // clear the var
            unset($_product);

        }
    }

ただし、次のエラー メッセージが表示されます。

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`workoutlife`.`catalog_product_website`, CONSTRAINT `FK_CATALOG_PRODUCT_WEBSITE_WEBSITE_ID_CORE_WEBSITE_WEBSITE_ID` FOREIGN KEY (`website_id`) REFERENCES `core_website` (`website_id`) ON DELET)

この制約が失敗する理由を誰か教えてもらえますか? そして、なぜ ON DELET があるのでしょうか? 私は何も削除しようとはしていません。ティア

4

2 に答える 2

0

core_website テーブルを見てください。配列内の 1 つ以上の ID が無効であると推測しています (core_website に一致する website_id がありません)。これは、エラーで指定された制約に違反します。

catalog_product_website テーブルの完全な制約は次のとおりです。

CONSTRAINT `FK_CATALOG_PRODUCT_WEBSITE_WEBSITE_ID_CORE_WEBSITE_WEBSITE_ID` FOREIGN KEY (`website_id`) REFERENCES `core_website` (`website_id`) ON DELETE CASCADE ON UPDATE CASCADE

ON DELETE CASCADE は、core_website テーブルからエントリを削除すると、catalog_product_website テーブル内の関連付けられたすべてのエントリ (同じ website_id を持つ) も削除されることを意味します。これは、無駄なデータが残っていないことを確認する方法です。

あなたの例では何も削除されていません。MySQL は、失敗したときに制約エントリ全体を表示するのが好きです。

于 2012-07-06T04:17:02.927 に答える
0

これは通常、製品が見つからない場合に発生します。たとえば、そのような ID/SKU がないか、パラメーターが NULL の場合、モデルは新しい製品オブジェクトを返します。これは空のモデルであるため、名前や価格などのデータを入力する必要があります。

したがって、答えは、$value['entity_id']実際に何かに設定されていてNULLではない最初のチェックであり、2番目のチェックで、そうでない$_product->getData()場合$_product->getId()は製品が見つからないことを意味します。

于 2014-02-15T00:40:56.813 に答える