バージョン選択

フォーラム

メニュー

オンライン状況

90 人のユーザが現在オンラインです。 (79 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 90
もっと...

サイト内検索

質問 > 管理機能 > 検索条件「在庫なし」のエラー

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
tori3103
投稿日時: 2019/12/13 18:48
対応状況: −−−
新米
登録日: 2019/12/8
居住地:
投稿: 8
検索条件「在庫なし」のエラー
[EC-CUBE] 4.03

管理画面からの検索で「在庫数なし」あるいはトップページの「在庫切れ商品数」からのリンクがエラーになります。

エラーメッセージは
「"Warning: min(): Array must contain at least one element"」
です。

Product.phpの
public function getPrice02Min()
{
 $this->_calc();

 return min($this->price02);
}

がエラー箇所で$this->price02が空配列なのが原因のようです。

遡ってfunction _calc()を見ると
if ($ProductClass->isVisible() == false) {
                        continue;
                    }

となっているので,在庫なしのデータが全部visible=falseなら空の配列にはなるのだと思います。

2系から4系へデータを移行しているのでその際になにかデータがおかしくなったかもしれずよくわからないのですが,実際の運用ではこのようなパターンでの現象は起きないものでしょうか?
開発モードでだけ発生するエラーなので緊急性はないのと,普通に管理画面から運用しているだけなら起きない現象であればそのままでもいいかなと思っているので,そのあたりを教えていただけると助かります。

よろしくお願いいたします。
umebius
投稿日時: 2019/12/13 23:48
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: 検索条件「在庫なし」のエラー

visible=falseは、規格を設定している商品で使用しない規格に設定されるフラグなので、管理画面から商品登録する場合規格を1つ以上指定しないと登録できないため問題は起きないのだと思います。

(商品の公開・非公開は別にフラグがあってdtb_productテーブルのproduct_status_idです)

2系から移行されたのことですが、この辺りの仕様はなるべく合わせた方がよかと思います。他の部分やプラグインに影響することもあるので。


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

tori3103
投稿日時: 2019/12/14 0:54
対応状況: −−−
新米
登録日: 2019/12/8
居住地:
投稿: 8
Re: 検索条件「在庫なし」のエラー
ご回答ありがとうございます。

エラーが出ている商品の例を一つ挙げると,データベース上ではこの商品に紐づいているproduct_classのレコードは7つあって,うち3つが在庫無制限でvisible=true,残りの4つは在庫0でvisible=falseです。
商品自体は公開です。

管理画面の商品一覧でこの商品IDで検索すると一覧に表示されますが,検索条件に「在庫なし」を追加して再検索した場合エラーになります。
一度商品規格を初期化して新たに設定し直したり,規格をなくしてデフォルトだけにした場合に,それまでのproduct_classのすべての在庫数が0だとすると,在庫なしのままvisible=falseになり,この状態になりそうな気がするのですが,運用上はそうならないようになっているのでしょうか?
umebius
投稿日時: 2019/12/16 9:31
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: 検索条件「在庫なし」のエラー
visibleはその規格を使用するチェックをしているかどうかで
在庫との連動はなかったと思いますが、何か事象が発生していましたでしょうか?

規格を初期化した際は、古いものは全てvisible=falseになりますが、規格無しのデータがvisible=trueにセットされます。

https://github.com/EC-CUBE/ec-cube/blob/4.0.3/src/Eccube/Controller/Admin/Product/ProductClassController.php#L216


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

tori3103
投稿日時: 2019/12/17 17:24
対応状況: −−−
新米
登録日: 2019/12/8
居住地:
投稿: 8
Re: 検索条件「在庫なし」のエラー
ご回答ありがとうございます。

商品を新規作成してやってみたのですが…,
1.在庫数10で商品を新規登録
2.規格を3つ在庫数0で登録
この時点では1がvisible=false,2がvisible=trueになっていると思います。
検索条件でこの商品IDと「在庫なし」で検索すると正常に検索されて一覧に当該商品が表示されます。

3.この商品の編集画面から「この商品の規格を確認」ボタンの規格登録画面で「商品規格の初期化」をして規格をなしにします。
この時点で1がvisible=trueになり2は3つともvisible=falseになると思います。
この状態で「在庫なし」の条件を入れて検索すると最初に書いたエラーになるのです。

当該商品は商品規格は削除されているので検索結果に入らないのはいいのですが,エラーになるためそれ以外の拾いたい結果が表示されなくなっているというのが現状です…。



umebius
投稿日時: 2019/12/17 17:49
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: 検索条件「在庫なし」のエラー
ありがとうございます、現象確認できました。

確かに規格を初期化すると管理画面から関与することができないvisible=falseのデータが生成されます。

1がvisible=trueになり2は3つともvisible=falseになるという設計自体は問題ないと思うのですが、管理画面の商品検索(「在庫なし」にチェック時)に不具合があり、エラーになっております。

端的にいうと、Eccube\Repository\ProductRepository::getQueryBuilderBySearchDataForAdminで、visible=falseが検索対象から除外されていないことが問題だと考えられます。

つまりgetQueryBuilderBySearchDataForAdminメソッド内で下記の1行を追加すれば改善すると思われますが、詳細確認してissue登録させていただきます。

$qb->andWhere('pc.visible = true');


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

tori3103
投稿日時: 2019/12/17 19:11
対応状況: 解決済
新米
登録日: 2019/12/8
居住地:
投稿: 8
Re: 検索条件「在庫なし」のエラー
ありがとうございます。
よろしくお願いいたします。

P.S.
リポジトリのカスタマイズで対応できました。
ありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,293名です
総投稿数は109,692件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.