質問 > 管理機能 > EC-CUBE3にてカスタマイズを行った項目がnullとなってしまう(解決済み) |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
ゲスト |
投稿日時: 2016/6/13 13:54
対応状況: 確認中
|
EC-CUBE3にてカスタマイズを行った項目がnullとなってしまう(解決済み) お世話になっております。
EC-CUBE:3.0.10 DB:MySQL 10.1.13 WEB:Apache/2.4.17 PHP:5.6.21 現在、注文番号のカスタマイズを行いカスタマイズロジックは 想定通り動いており実行したのですが注文後のメールで注文番号が 空欄で(何も表示されずに)配信されております。 カスタマイズ後の項目に変更しentityにも追加をしておりましたが DBでnullとなっていましたので当然何も表示されないとは思います。 そこで、処理を順々に追いながら処理の解析を進めていましたが以下の部分で 詰まってしまいましたので追加質問をさせていただきます。 対象はdumpにより表示させながら行っておりまして 該当ロジックの前後でorder_numberがnullとなっていたため 該当ロジック内が現在の不具合対象ロジックと思います。 以下です vendor\doctrine\orm\lib\Doctrine\ORM ┗UnitOfWork.php 2041行目付近のdoRefreshメソッド内 $this->getEntityPersister($class->name)->refresh( array_combine($class->getIdentifierFieldNames(), $this->entityIdentifiers[$oid]), $entity); ここになります。 この先はどこが呼び出されるのか追えませんでした。 お分かりになる方がいましたら、ご教示いただければ幸いです。 よろしくお願いいたします。 |
|
ゲスト |
投稿日時: 2016/6/13 15:43
対応状況: 確認中
|
Re: EC-CUBE3にてカスタマイズを行った項目がnullとなってしまう 同機能のカスタマイズはShoppingService.phpの
registerPreOrderメソッド内で行っております。 該当メソッドの戻りが同PHP内createOrderメソッドと理解し createOrderの戻りがShoppingController.phpとなるかと思っております。 直後121行目付近の // 受注関連情報を最新状態に更新 $app['orm.em']->refresh($Order); こちらの呼び出し先は \vendor\doctrine\orm\lib\Doctrine\ORM\EntityManager.php の582行目付近のrefreshメソッドと解釈しました。 それぞれ認識としてはあっているでしょうか? |
|
DELIGHT |
投稿日時: 2016/6/13 16:05
対応状況: −−−
|
仙人 登録日: 2010/2/3 居住地: 熊本県・九州・長野県・関東甲信越 投稿: 572 |
Re: EC-CUBE3にてカスタマイズを行った項目がnullとなってしまう 引用:
それぞれ認識としてはあっているでしょうか? あっています。 エスパーですが、下記ファイルにorder_numberに関するマッピングを追加しましたか? https://github.com/EC-CUBE/ec-cube/blob/3.0.10/src/Eccube/Resource/doctrine/Eccube.Entity.Order.dcm.yml
|
ゲスト |
投稿日時: 2016/6/13 16:18
対応状況: −−−
|
Re: EC-CUBE3にてカスタマイズを行った項目がnullとなってしまう ご回答ありがとうございます。
引用:
上記には追記してあります。 順に追って行って、本題の部分のロジックがわからず困っております。 ShoppingController内以下の部分の前後でorder_numberがnullとなっており // 受注関連情報を最新状態に更新 $app['orm.em']->refresh($Order); 120行目付近 この先さらに追っていくと EntityManager内以下の部分の前後でnullとなりました $this->unitOfWork->refresh($entity); 590行目付近 そして、その先本題の部分の前後でnullとなっていました。 そこのとび先がわからずという形です。 |
|
DELIGHT |
投稿日時: 2016/6/13 16:31
対応状況: −−−
|
仙人 登録日: 2010/2/3 居住地: 熊本県・九州・長野県・関東甲信越 投稿: 572 |
Re: EC-CUBE3にてカスタマイズを行った項目がnullとなってしまう 実際に試してはいませんが、ソースコードを見た限りでは
Persisters\BasicEntityPersister Persisters\SingleTablePersister Persisters\JoinedSubclassPersister Persisters\UnionSubclassPersister のどれかのrefreshメソッドが呼ばれています。 EntityManager::refreshメソッドは、渡されたエンティティをデータベースの最新の状態に更新する処理だと思います。 そのため、ShoppingController::index()内のEntityManager::refresh()時点で、データベース上のorder_numberがnullになっていませんか? (私もdoctrineにそこまで明るくないため、EntityManager::refresh()の理解が違っている可能性はあります。)
|
ゲスト |
投稿日時: 2016/6/13 17:28
対応状況: −−−
|
Re: EC-CUBE3にてカスタマイズを行った項目がnullとなってしまう 引用:
Persisters\BasicEntityPersister ここのrefreshが呼ばれているようです。 また、Apacheのログに [Mon Jun 13 14:17:14.893317 2016] [:error] [pid 9388:tid 1848] [client ::1:63571] PHP Fatal error: Call to undefined function Doctrine\\ORM\\getOrderNumber() in C:\\xampp\\htdocs\\eccube-3.0.10\\vendor\\doctrine\\orm\\lib\\Doctrine\\ORM\\UnitOfWork.php on line 2060, referer: http://localhost/eccube-3.0.10/html/cart [Mon Jun 13 14:17:32.111451 2016] [:error] [pid 9388:tid 1848] [client ::1:63576] PHP Fatal error: Call to undefined function Doctrine\\ORM\\getOrderNumber() in C:\\xampp\\htdocs\\eccube-3.0.10\\vendor\\doctrine\\orm\\lib\\Doctrine\\ORM\\UnitOfWork.php on line 2057, referer: http://localhost/eccube-3.0.10/html/cart が出ていました。 |
|
ゲスト |
投稿日時: 2016/6/13 18:16
対応状況: 確認中
|
Re: EC-CUBE3にてカスタマイズを行った項目がnullとなってしまう 引用:
今回、0始まりとなる可能性もあるため 現状int系ではだめかと思いvarcharとしていますが その場合の定義は以下であっているでしょうか? ここが誤りの場合の不具合はあるのでしょうか? order_number: type: string nullable: false unsigned: false |
|
DELIGHT |
投稿日時: 2016/6/13 19:01
対応状況: −−−
|
仙人 登録日: 2010/2/3 居住地: 熊本県・九州・長野県・関東甲信越 投稿: 572 |
Re: EC-CUBE3にてカスタマイズを行った項目がnullとなってしまう 引用:
その場合の定義は以下であっているでしょうか? 問題ないと思います。(文字列型なのにunsignedが設定されているのは変ですが、設定されていても問題ないことは手元で確認しました。) 現在の問題点を整理させて下さい。今はどこで問題が発生しているのでしょうか? ・注文フローでエラーが発生しているのでしょうか? それとも注文自体は完了するがorder_numberがnullになるのでしょうか? ・order_numberはDBに登録されますか? ShoppingService::registerPreOrder()内のEntityManager::flush()直後にexitして下さい。 DBの値を直接確認してorder_numberがnullなら、 そもそも何か(マッピングとかエンティティとか)が間違ってます。
|
ゲスト |
投稿日時: 2016/6/13 19:10
対応状況: −−−
|
Re: EC-CUBE3にてカスタマイズを行った項目がnullとなってしまう 引用:
こちらとしては後者になります。 注文は完了しメールも届くのですが、order_number(カスタマイズ後の注文番号)がnullとなってしまいメールにも受注完了後のマスタにも番号の表示はされないという状況です。 引用:
こちらですが、flush後にorder_numberを設定させる処理を行っているためこの時点ではnullとなります。 EntityManager::flush()で本来の連番の注文番号が採番されそれを使用して行っているため。 |
|
ゲスト |
投稿日時: 2016/6/13 19:13
対応状況: −−−
|
Re: EC-CUBE3にてカスタマイズを行った項目がnullとなってしまう エンティティは以下を修正しております。
Order.phpの追記部分 /** * @var String */ private $order_number; ・・・ ・・・ /** * Set order_number * * @param string $orderNumber * @return Order */ public function setOrderNumber($orderNumber) { $this->order_number = $orderNumber; return $this; } /** * Get order_number * * @return integer */ public function getOrderNumber() { return $this->order_number; } |
|
(1) 2 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |