バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > dtb_shippingへのカラム追加したものが、画面遷移で削除される

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
yhyh
投稿日時: 2022/10/11 10:06
対応状況: 解決済
新米
登録日: 2022/10/10
居住地:
投稿: 6
dtb_shippingへのカラム追加したものが、画面遷移で削除される
▼テンプレート
[EC-CUBE]4.1.2 新規インストール
[OS] ubuntu 22.0.4
[PHP] 7.4
[データベース] Mariadb
[WEBサーバ] apache2.4
[導入プラグインの有無] 売上集計、メールマガジン、クーポン、おすすめ商品管理
[カスタマイズの有無] dtb_customer、dtb_shippingに役職名のカラムを追加して保存。
app\Customize以下にtraitを作成、Customize\Form\Extension 以下に各種Formエクステンションを作成

[現象]
上記カスタマイズを行い、動作検証をしていたのですが、

1、 注文画面から配送先の変更画面(shipping_edit)への遷移
2、 注文画面から注文確認画面(shopping_confirm)への遷移

で、追加した役職名カラムのデータがピンポイントで削除されます。会員・非会員で状況は変わりませんでした。管理画面での登録は可能でした。

ログを確認したところ、ShoppingControllerの特定箇所
(ログによると「集計処理を開始します」の後)でdtb_order_item、dtb_orderのUPDATE文が発行されていて、それと同時にdtb_shippingの該当カラムのUPDATE文が発行されていて、追加したカラムのデータをNULLで更新していました。
直前まで、Shippingのモデルに、追加したカラムのデータが入っていることは確認できています。

これがなぜなのかさっぱりわからないので、どなたか教えていただくことは可能でしょうか。このUPDATE文を発行しないようにする、もしくはUPDATE文にデータを入れる方法があるということなのでしょうか。

もしこちらの環境だけでしたら、申し訳ございません。

よろしくお願いします。

【10/11 追記】
記載忘れですが、
https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=24468&forum=2&post_id=99471#forumpost99471

こちらを参考にしてsetFromCustomer等のメソッドは上書き処理を行っていて、直前までモデルにデータは正常に入っています。

【10/11追記2】
下記の処理においてもデータが削除されました。
・配送方法を変更する

【10/11追記3】
データが消える流れが何となくわかりました。
いずれの場合も、redirectToメソッドもしくはconfirmメソッドの
$form->handleRequest($request)
の段階で$formと$Orderから消されていて、それをもとにexecutePurchaseFlow->flushされているために、データベースからデータが消えているようです。だからどうしたらいいのかというのがさっぱりわかりませんが・・・。
nanasess
投稿日時: 2022/10/11 15:59
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: dtb_shippingへのカラム追加したものが、画面遷移で削除される
後続の処理で何らかのエラーが発生し、ロールバックされていませんでしょうか?
yhyh
投稿日時: 2022/10/11 16:38
対応状況: −−−
新米
登録日: 2022/10/10
居住地:
投稿: 6
Re: dtb_shippingへのカラム追加したものが、画面遷移で削除される
ご返信いただき、ありがとうございます。

ECCUBEのログで、ロールバックされたかどうかはどのようにわかりますでしょうか。ログを検索しましたが、[ROLL]や[BACK]での一致は有りませんでした。
nanasess
投稿日時: 2022/10/11 17:09
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: dtb_shippingへのカラム追加したものが、画面遷移で削除される
なるほど、 PurchaseFlow で何か発生していそうですが、具体的な箇所はわかりますでしょうか?
ステップ実行などで調査するのが良いかと。
yhyh
投稿日時: 2022/10/11 17:52
対応状況: −−−
新米
登録日: 2022/10/10
居住地:
投稿: 6
Re: dtb_shippingへのカラム追加したものが、画面遷移で削除される
ご返信ありがとうございます。

仰る通り、purchaseFlowなのかなという感じは確かにしていますが、そこでなぜDBのアップデートがかかってしまうのかが不明です。

具体的な箇所ですが、注文確認画面への遷移の場合、
ShoppingController の confirm メソッドの、$response を返しているexecutePurchaseFlowの直前までは、$OrderのShippings中にデータがあることは確認しています。
([10/11 追記] この点は間違いで、その前の$form->createForm の前まででした。また、モデルのデータから消えているだけでデータベースには残っておりました)

また、配送先の設定画面への遷移の場合、
同Controller のshippingEdit メソッドに入った段階で既に消えており、redirectTo メソッドの $form->handleRequest()を過ぎると、モデルの中からは消えています。ただ、この時点ではデータベース上には残っていて、やはりその直後のexecutePurchaseFlowの後には、データベースからも消えているようです。

[10/11追記]
後者の場合、redirectToメソッドのexecutePurchaseFlowとその直後のflushをコメントアウトすると、値が保持されることは確認出来ました。
ただ前者の場合、confirmメソッドのexecutePurchaseFlowと直後のflushをコメントアウトしても、状況は変わりませんでした。さらに調べたところ、confirmメソッドの下部にも一つflushされている箇所があり、こちらをコメントアウトしたところ、
[注文確認] 注文確認画面を表示します.
の直後でreturnされている$Orderの中では消えていますが、データベースには残っている状態となりました。このため、確認画面での表示上は、役職名が表示されていませんが、データベースには残っているというちぐはぐな状態となっています。
nanasess
投稿日時: 2022/10/11 23:32
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: dtb_shippingへのカラム追加したものが、画面遷移で削除される
引用:

$form->handleRequest($request)
の段階で$formと$Orderから消されていて、


という事象から想像すると、役職名のパラメータに空文字のリクエストが渡っていませんでしょうか?
hidden などできちんと引き継げていますでしょうか?
yhyh
投稿日時: 2022/10/12 1:51
対応状況: −−−
新米
登録日: 2022/10/10
居住地:
投稿: 6
Re: dtb_shippingへのカラム追加したものが、画面遷移で削除される
遅い時間にありがとうございます。

>役職名のパラメータに空文字のリクエストが渡っていませんでしょうか?
>hidden などできちんと引き継げていますでしょうか?

そういう考えになりますよね・・・。

この時のリクエストのパラメータは、$request->request->all()とかで見られると思うのですが、その中には役職名のカラムの情報はなかったですし、明示的にnullの指定もありませんでした。一方では、Shippingの情報自体も配送方法とお届け日・お届け時間しかなく、その他の住所や氏名などは持っていませんでしたが、この時にhiddenで持つように指定しないといけないのでしょうか。

例えばOrderItemなどはhiddenで持っている形跡がないようなので、Shippingも特にhiddenで持っているわけではないのかなと考えていました。

また明日試してみます。
red
投稿日時: 2022/10/12 8:49
対応状況: −−−
登録日: 2010/2/15
居住地: 東京都
投稿: 1570
Re: dtb_shippingへのカラム追加したものが、画面遷移で削除される
どう拡張してるかわかりませんが、この辺が影響してませんか?

// ShoppingController::checkoutから呼ばれる場合は, フォーム項目の定義をスキップする.
if ($options['skip_add_form']) {
return;
}


----------------
EC-CUBEのカスタマイズ、トラブル解決承ります
お気軽にお問い合わせ下さい
https://www.ec-cube.net/integrate/partner/partner.php?partner_id=690

yhyh
投稿日時: 2022/10/12 15:06
対応状況: −−−
新米
登録日: 2022/10/10
居住地:
投稿: 6
Re: dtb_shippingへのカラム追加したものが、画面遷移で削除される
ご返信ありがとうございます。

確認したところ、いただいた構文はcheckoutメソッドにしか実装されておらず、今回はOrderTypeではなく主にShippingTypeを拡張していますので、関係がなさそうです。
yhyh
投稿日時: 2022/10/12 15:15
対応状況: 解決済
新米
登録日: 2022/10/10
居住地:
投稿: 6
Re: dtb_shippingへのカラム追加したものが、画面遷移で削除される
nanasess様の仰る通り、hiddenフォームを追加したところ、値を渡すことができ、データベースから消えることもなくなりました。

考えてみれば、post/getで画面遷移時の値の受け渡しはフォームでやるという基本中の基本で悩んでしまってお恥ずかしい限りです。
追加した項目は自動で引き継がれないとおかしいのではないかという考えが先行してしまいました。
Shippingにカラムを追加した際は、値は引き継がれないのが通常の動作で、都度hiddenを追加しないといけないという事ですね。
(Orderは確認してないので不明ですが、注文者情報はhiddenで持っているようでしたので、同じような形でしょうか)

また、直接の関係はないのですが、red様にご提示いただいた箇所のチェック中に、注文確認画面にinputやhiddenが残っていると、checkoutメソッド実行時の$form->isValid()がfalseになってしまい、購入エラー画面が表示されてしまうこともわかりました。

ご協力いただきました皆様、時間をいただきましてありがとうございました。本当に助かりました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1644
8
red
1570
9
mcontact
1289
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
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.