質問 > 管理機能 > カテゴリ登録CSVを修正後、カテゴリ管理画面からの登録に異変 |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
ecnobu |
投稿日時: 2009/7/31 0:35
対応状況: −−−
|
半人前 登録日: 2009/6/4 居住地: 投稿: 23 |
カテゴリ登録CSVを修正後、カテゴリ管理画面からの登録に異変 お世話になっております。
EC-CUBE 2.4.1 DB PostGreSQL 8.3.7 Apache 2.2.9 という環境でいじっておりますが、管理画面の「商品管理」->「カテゴリ登録CSV」の 機能を使ってカテゴリを登録しようとしても、トップカテゴリしか正常に登録されない ので、LC_Page_Admin_Products_UploadCSVCategory.php の lfRegistProduct() に、下のようなロジックを加えて、サブカテゴリもCSVから登録できるようにしました。
しかし、その後、「カテゴリ管理」画面から、カテゴリを登録すると、既に使用されている カテゴリIDが付与されてしまったりします。そのような副作用を起こすような変更には 思えないのですが、これは何が悪いのでしょうか? また、dtb_category_category_id_seq テーブルの last_value と、カテゴリID との 関係がつかめず、行き詰まっております。 何卒ご教授いただけますよう、よろしくお願いします。 |
tao_s |
投稿日時: 2009/7/31 1:12
対応状況: −−−
|
仙人 登録日: 2008/8/20 居住地: 東京 投稿: 804 |
Re: カテゴリ登録CSVを修正後、カテゴリ管理画面からの登録に異変 dtb_category_category_id_seqのlast_valueとcategory_idの最後の値が一致している必要があります。
category_idはdtb_categoryにレコードを追加した時に自動的に付与されるのですが、その時に使用しているのがdtb_category_category_id_seqです。多分カラムの定義にNEXTVAL(うんちゃら・・・)と書いてあると重います。
|
ecnobu |
投稿日時: 2009/7/31 10:47
対応状況: −−−
|
半人前 登録日: 2009/6/4 居住地: 投稿: 23 |
Re: カテゴリ登録CSVを修正後、カテゴリ管理画面からの登録に異変 そういう仕組みだったんですか。
ご教授ありがとうございました。 しかし、CSVからカテゴリを登録したときは、 dtb_category_category_id_seq の last_value が インクリメントされないのは、どこが悪いのでしょうか? 重ね重ねの質問で申し訳ありませんが、よろしくお願い いたします。 |
tao_s |
投稿日時: 2009/8/1 23:33
対応状況: −−−
|
仙人 登録日: 2008/8/20 居住地: 東京 投稿: 804 |
Re: カテゴリ登録CSVを修正後、カテゴリ管理画面からの登録に異変 確認していないので何とも言えませんが、category_idを指定してアップした場合はupdate扱いでインクリメントされないのではないのでしょうか?
category_idを空欄でアップしたら正常に登録されると思います。
|
ecnobu |
投稿日時: 2009/8/2 11:58
対応状況: −−−
|
半人前 登録日: 2009/6/4 居住地: 投稿: 23 |
Re: カテゴリ登録CSVを修正後、カテゴリ管理画面からの登録に異変 ご指南ありがとうございます。 しかし、カテゴリcategory_idを空欄でアップしても、 dtb_category_category_id_seq の last_value は インクリメントされませんでした。 |
kuro |
投稿日時: 2009/8/12 19:04
対応状況: −−−
|
半人前 登録日: 2008/7/23 居住地: 投稿: 20 |
Re: カテゴリ登録CSVを修正後、カテゴリ管理画面からの登録に異変 ecnobuさま
EC-CUBE 2.4.1のデフォルト状態でも同じ現象(インクリメントされない)が起きました。 「カテゴリ登録CSV」からのカテゴリ登録後、 「カテゴリ管理」でカテゴリ手動登録を行うとそのような状態になるようです。 (「カテゴリ登録CSV」のみ or 「カテゴリ管理」のみしか使用しない場合は、 インクリメントされてなくてもcategory_id重複などの実害は出てこないと思います) ------------------------------------------------------------- ■管理画面「カテゴリ登録CSV」からCSVアップロードで登録した場合 ------------------------------------------------------------- ⇒category_idには登録済み最大番号+1がセットされますが、 最大番号の取得・セットにはdtb_category_category_id_seqは使用されていないようです。 また、「カテゴリ登録CSV」からの登録の場合、 dtb_category_category_id_seqはインクリメントされません。 ------------------------------------------------------------- ■管理画面「カテゴリ管理」から手動で登録した場合 ------------------------------------------------------------- ⇒CSVアップロードを行った後では、dtb_category_category_id_seqとcategory_idの最大番号にずれが生じています。 「カテゴリ管理」からの登録の場合、dtb_category_category_id_seqに従ってcategory_idを設定するため、 CSVで登録済みのカテゴリーと重複したcategory_idが振られてしまいます。 ↓多分★★★の部分でcategory_idを指定してしまってるので nextval()が動いていないんじゃないかと思うのですが・・・ ---------------------------------------------------------------- ※LC_Page_Admin_Products_UploadCSVCategory.php 240行目付近 ---------------------------------------------------------------- /** * カテゴリ登録を行う. * * @param SC_Query $objQuery SC_Queryインスタンス * @param string|integer $line 処理中の行数 * @return void */ function lfRegistProduct($objQuery, $line = "") { $objDb = new SC_Helper_DB_Ex(); $arrRet = $this->objFormParam->getHashArray(); //カテゴリID if ($arrRet['category_id'] == 0) { $category_id = $objQuery->max("dtb_category", "category_id") + 1;//★★★ $sqlval['category_id'] = $category_id;//★★★ $update = false; } else { $sqlval['category_id'] = $arrRet['category_id']; $update = true; } 〜〜〜〜〜 省略 〜〜〜〜〜 ---------------------------------------------------------------- phpPgAdminから「SELECT setval('dtb_category_category_id_seq', XXX)」で dtb_category_category_id_seqの最大値を正しいものにセットし直した後、 ★★★の行をコメントアウトすると、 CSVアップロードで新規登録の場合でもdtb_category_category_id_seqの数字がインクリメントされるようになりました。 (「カテゴリ登録CSV」「カテゴリ管理」両方から登録・編集を繰り返してみましたが、 category_idの重複やその他の問題は起こっていないように思います) もし上記の対処方法がまずいようでしたら、 どなたかアドバイスをいただけませんでしょうか。 |
ecnobu |
投稿日時: 2009/8/13 21:17
対応状況: −−−
|
半人前 登録日: 2009/6/4 居住地: 投稿: 23 |
Re: カテゴリ登録CSVを修正後、カテゴリ管理画面からの登録に異変 kuro さま
kuroさまのご指摘のとおり、確かに、CSVではないほうの カテゴリ登録を行う、LC_Page_Admin_Products_Category.php の insert 実行時(lfInsertCat() 内)には、category_id は 指定されていませんね。 それが原因だったとは。。。 ありがとうございます。 あ、でも、未確認(記憶がうつろ)ですが、それでもまだ、 今度は、CSVファイルに、dtb_category には未登録のカテゴリID を書いておくと、UPDATE 文になってしまって、正常に終了した ようにメッセージは出るけど登録はされなかったのではなかっ たかと思います。。。 。。。と思って、kuro さまのご指摘の変更を施した後、 実際にやってみたところ、 LC_Page_Admin_Products_UploadCSVCategory.php の lfCheckError() 340行めあたり(下記)でひっかかって エラーになりました。 (dtb_category_category_id_seqの最大値は正しい状態です)
|
kuro |
投稿日時: 2009/8/19 21:43
対応状況: −−−
|
半人前 登録日: 2008/7/23 居住地: 投稿: 20 |
Re: カテゴリ登録CSVを修正後、カテゴリ管理画面からの登録に異変 ecnobuさま
ご返信が遅くなり、申し訳ございません > LC_Page_Admin_Products_UploadCSVCategory.php の > lfCheckError() 340行めあたり(下記)でひっかかって > エラーになりました。 こちらの件ですが、私の方も既存カテゴリのcategory_nameを修正&上書きUPする際に 同じエラーが起きました。 良く確認しないままですみません・・・
↑この部分なのですが、$_POST['category_name']というのがどこから来ている値なのかよくわかりません・・・ (どなたかご存じないでしょうか? 中身は常に空っぽですし、管理画面からcategory_nameをポストしている訳でもなさそうです) 既存カテゴリのcategory_name変更の場合だと、兄弟カテゴリに同一category_nameのものがなければ $arrCat[0]['category_name']は空になりますので、常に空の$_POST['category_name']とイコールになって 上記エラーメッセージが表示されていました。(※本来ならエラーにならない条件です)
上記のように変更したところ、私の方ではエラーを出さずにUPDATEすることができました。 また、兄弟カテゴリに存在するcategory_nameに変更しようとした場合も、ちゃんとエラーがでます。 もし上記の変更でなにか問題があるようでしたら、 ご指摘いただけると嬉しいです。 > 今度は、CSVファイルに、dtb_category には未登録のカテゴリID > を書いておくと、UPDATE 文になってしまって、正常に終了した > ようにメッセージは出るけど登録はされなかったのではなかっ > たかと思います。。。 こちらの件ですが、カテゴリの新規登録時に「カテゴリID(category_id)」欄に任意の番号を 記入したいということでしょうか? (新規登録時は「category_id」欄を空欄にして登録すると思うのですが、そういう意味ではなかったですか?) |
ecnobu |
投稿日時: 2009/8/22 11:45
対応状況: −−−
|
半人前 登録日: 2009/6/4 居住地: 投稿: 23 |
Re: カテゴリ登録CSVを修正後、カテゴリ管理画面からの登録に異変 kuroさま
重ねてのご調査、ありがとうございます。 >上記のように変更したところ、私の方ではエラーを出さずにUPDATEすることができました。 >また、兄弟カテゴリに存在するcategory_nameに変更しようとした場合も、ちゃんとエラーがでます。 そう言われれば、comu版では kuro さまの変更と同様の変更が なされているという記事を読んだことがあるような気がしま す。別件だったかもしれませんが。。。 >> 今度は、CSVファイルに、dtb_category には未登録のカテゴリID >> を書いておくと、UPDATE 文になってしまって、正常に終了した >> ようにメッセージは出るけど登録はされなかったのではなかっ >> たかと思います。。。 > >こちらの件ですが、カテゴリの新規登録時に「カテゴリID(category_id)」欄に任意の番号を >記入したいということでしょうか? >(新規登録時は「category_id」欄を空欄にして登録すると思うのですが、そういう意味ではなかったですか?) あいまいな記述で申し訳ありませんでした。 ご推察のとおり、カテゴリの新規登録時に「カテゴリID」欄に 任意の番号を記入した場合のことを想定した話です。 仕様として、新規登録時は「カテゴリID」欄は空欄にしなければ ならないのでしょうか? それならそれでいいのですが。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |