質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

EC-CUBE

EC-CUBEは、主に日本国内で開発されているECコンテンツ管理システムです。ロックオン社のECKitを元にしてオープンソース化され、商品管理・受注管理・顧客管理・売上集計などECに特化した様々な機能を備えています。

Q&A

解決済

1回答

1850閲覧

EC-CUBE4で注文完了時に今回注文分のみをCSV出力する方法について

yamada_take

総合スコア10

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

EC-CUBE

EC-CUBEは、主に日本国内で開発されているECコンテンツ管理システムです。ロックオン社のECKitを元にしてオープンソース化され、商品管理・受注管理・顧客管理・売上集計などECに特化した様々な機能を備えています。

0グッド

0クリップ

投稿2020/02/19 01:18

編集2020/02/20 06:18

EC-CUBE4.0.3で注文完了時に今回注文データをCSVに出力する方法を調べています。
※PHP、EC-CUBEは今回初めて触り、フレームワークであるsymfonyの基礎は勉強し始めたばかりです。

カートの内容を確定時にテキストに書き出すロジックを、
「src\Eccube\Controller\ShoppingController.php」の
「public function checkout(Request $request)」内の
カート削除前に実装しました。

PHP

1// csvへの出力処理 2try { 3 //カートサービスよりカート情報を取得 4 $cartData = $this->cartService->getCart(); 5 //カート情報よりアイテム取得 6 $cartItems = $cartData->getItems(); 7 8 // 受注保存用ファイルオープン 9 $fhandle = fopen( $Order->getOrderNo()."_juchu_comp.csv", "a"); 10 11 if ($fhandle === false) { 12 log_error('[注文処理] 保存エラーが発生しました.'); 13 $this->entityManager->rollback(); 14 return $this->redirectToRoute('shopping_error'); 15 } 16 $outDateShare = $cartData->getCustomer()->getId().','; 17 $outDateShare .= $cartData->getCustomer()->getName01().','; 18 $outDateShare .= $cartData->getCustomer()->getEmail().','; 19 20 foreach ($cartItems as $cartitem) { 21 $outData = $outDateShare; 22 $outData .= $cartitem->getProductClass()->getCode().','; 23 $outData .= $cartitem->getProductClass()->getProduct()->getName().','; 24 $outData .= $cartitem->getQuantity().','; 25 $outData .= $cartitem->getPrice().','; 26 $outData .= PHP_EOL; 27 28 if (fwrite($fhandle, $outData) === false) { 29 log_error('[注文処理] 書き込みエラーが発生しました.'); 30 $this->entityManager->rollback(); 31 return $this->redirectToRoute('shopping_error'); 32 } 33 } 34 35 // ファイルを閉じる 36 fclose($fhandle); 37 catch (Exception $e) { 38 log_error('[注文処理] 保存処理エラーが発生しました.', [$e->getMessage()]); 39 $this->entityManager->rollback(); 40 $this->addError($e->getMessage()); 41 return $this->redirectToRoute('shopping_error'); 42} 43 44// カート削除 45log_info('[注文処理] カートをクリアします.', [$Order->getId()]); 46$this->cartService->clear();

ここでの処理は全て正常終了しますが、そのあと「システムエラー」となり以下のログが出力されます。調査又は見直すべき部分を教えてください。

log

1システムエラーが発生しました。 2["A new entity was found through the relationship 'Eccube\Entity\CartItem#Cart' that was not configured to cascade persist operations for entity: Eccube\Entity\Cart@000000002730a39b00000000111e5af7. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example @ManyToOne(..,cascade={\"persist\"}). If you cannot find out which entity causes the problem implement 'Eccube\Entity\Cart#__toString()' to get a clue.", 3"C:\xampp\htdocs\eccube4\vendor\doctrine\orm\lib\Doctrine\ORM\ORMInvalidArgumentException.php",102," 4 #0 C:\xampp\htdocs\eccube4\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php(3443): Doctrine\ORM\ORMInvalidArgumentException::newEntitiesFoundThroughRelationships(Array)\n 5 #1 C:\xampp\htdocs\eccube4\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php(362): Doctrine\ORM\UnitOfWork->assertThatThereAreNoUnintentionallyNonPersistedAssociations()\n 6 #2 C:\xampp\htdocs\eccube4\vendor\doctrine\orm\lib\Doctrine\ORM\EntityManager.php(359): Doctrine\ORM\UnitOfWork->commit(NULL)\n#3 C:\xampp\htdocs\eccube4\var\cache\prod\ContainerCqirhhx\EntityManager_9a5be93.php(83): Doctrine\ORM\EntityManager->flush(NULL)\n 7 #4 C:\xampp\htdocs\eccube4\src\Eccube\Controller\ShoppingController.php(481): EntityManager_9a5be93->flush()\n 8 #5 C:\xampp\htdocs\eccube4\vendor\symfony\http-kernel\HttpKernel.php(151): Eccube\Controller\ShoppingController->checkout(Object(Symfony\Component\HttpFoundation\Request))\n 9 #6 C:\xampp\htdocs\eccube4\vendor\symfony\http-kernel\HttpKernel.php(68): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1)\n 10 #7 C:\xampp\htdocs\eccube4\vendor\symfony\http-kernel\Kernel.php(200): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)\n 11 #8 C:\xampp\htdocs\eccube4\index.php(76): Symfony\Component\HttpKernel\Kernel->handle(Object(Symfony\Component\HttpFoundation\Request))\n 12 #9 {main}"] [POST, /eccube4/shopping/checkout, ::1, http://localhost/eccube4/shopping/confirm, Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/02/20 11:25

本家のフォーラムにのみいる人の方が詳しい人多いが、もともとのここをいじるはずが全部的はずれな予感
yamada_take

2020/02/21 00:55

ありがとうございます。 本家のフォーラムは登録していますが、ログインエラーでログインできない状況が続いたためこちらに投稿しました。 「EC-CUBE 4 システム構築入門 &店舗運営・管理ビギナーズガイド」、PHPStorm等最低限のものは揃えましたが、EC-CUBE4を触るうえでこの書籍あたりが参考になるなどのアドバイスがあればお願いします。
guest

回答1

0

自己解決

業務では利用できませんがPHPのコードで最低限何とか実現はしました。
このコードを入れると注文確定毎に注文情報をCSVへ書き出せました。
これで解決とします。ありがとうございました。

PHP

1// csvへの出力処理 2try { 3 4 // ページに文字表示 5 echo ("CSV開始"); 6 7 // データベースへの接続 8 $mysql = mysqli_connect('localhost','root','password','eccube'); 9 10 if ($mysql->set_charset("utf8") === false) { 11 echo ("set_charset error"); 12 } 13 if($mysql === false) { 14 echo("接続エラー"); 15 } 16 $sql = "SELECT "; 17 $sql .= " * "; 18 $sql .= "FROM "; 19 $sql .= " dtb_order o "; 20 $sql .= " left join dtb_order_item i on "; 21 $sql .= " o.order_no = i.order_id "; 22 $sql .= "where "; 23 $sql .= " o.order_no = ".$Order->getId(); 24 $rows = $mysql->query($sql); 25 if ($rows === false) { 26 echo("データ取得エラー"); 27 } 28 foreach ($rows as $row) { 29 $filename = 'order_'.$row['order_no'].'_'.(new \DateTime($row['order_date']))->format('YmdHis').'.csv'; 30 $rowdata = $row['order_no']; 31 $rowdata .= ",".$row['product_code']; 32 $rowdata .= ",".$row['product_name']; 33 dump($row); 34 file_put_contents($filename, $rowdata.PHP_EOL,FILE_APPEND); 35 } 36 $mysql->close(); 37 38 echo ("CSV終了"); 39} catch (Exception $e) { 40 log_error('[注文処理] 保存処理エラーが発生しました.', [$e->getMessage()]); 41 $this->entityManager->rollback(); 42 $this->addError($e->getMessage()); 43 return $this->redirectToRoute('shopping_error'); 44} 45 46// カート削除 47log_info('[注文処理] カートをクリアします.', [$Order->getId()]); 48$this->cartService->clear(); 49

投稿2020/02/25 07:07

yamada_take

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問