質問 > フロント機能 > 受注管理画面-CSVダウンロードで検索した注文の情報のみを出力する方法(出力項目のカスタマイズ後)を教えてください。 |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
tsurtua |
投稿日時: 2017/10/19 11:26
対応状況: 解決済
|
常連 登録日: 2017/3/31 居住地: 投稿: 57 |
受注管理画面-CSVダウンロードで検索した注文の情報のみを出力する方法(出力項目のカスタマイズ後)を教えてください。 お世話になります。
以下のカスタマイズをおこなった上で、 受注管理画面上の検索結果の対象注文の情報のみをCSV出力する方法 が分かる方、教えて頂けないでしょうか? カスタマイズ内容は、 受注管理画面のCSVダウンロードボタンを押して、ダウンロードしたCSVファイルに 注文番号、商品番号、商品名、その商品の注文数 の4つの情報をCSVファイルに出力するというものです。 該当の情報をCSVファイルで出力すること自体はできています。 ですが、このカスタマイズをおこなうと、受注管理画面で出力したい注文を注文番号などで検索したときに、 画面に表示されている注文だけでなく、すべての注文(del_flgが0のもの)を対象に情報を出力してしまいます。 例えば、注文番号欄に100~130として検索したときは、該当の31件のみの情報をCSVファイルに出力したいです。 SC_Helper_CSV.phpのsfDownloadCsvのデフォルトのソースの $sql = $objQuery->getSql($cols, $from, $where); のあとで$sqlの中身をデバッグでクエリ文を見るとwhere句には特に範囲指定のようなものは見受けられません。 なので、どうやって検索結果の注文のみを出力すればいいのかわかりません。 具体的なカスタマイズ内容は、 SC_Helper_CSV.phpのsfDownloadCsvを以下のようにカスタマイズしています。 変えているところは、 if($csv_id == 3){のところです。
以上、分かる方、心当たりのある方、何卒よろしくお願いします。 |
yuh |
投稿日時: 2017/10/19 12:14
対応状況: −−−
|
神 登録日: 2013/1/9 居住地: 大阪 投稿: 1819 |
Re: 受注管理画面-CSVダウンロードで検索した注文の情報のみを出力する方法(出力項目のカスタマイズ後)を教えてください。 LC_Page_Admin_OrderのbuildQueryで組み立てたwhere句が$whereに入るはずです。
条件を付けて検索して試してください。 WHERE del_flg = 0
のような形でやればできるかと思います。
|
tsurtua |
投稿日時: 2017/10/19 13:45
対応状況: −−−
|
常連 登録日: 2017/3/31 居住地: 投稿: 57 |
Re: 受注管理画面-CSVダウンロードで検索した注文の情報のみを出力する方法(出力項目のカスタマイズ後)を教えてください。 yuh様ご返信ありがとうございます。
buildQueryは見落としていました。 まず、$whereには、[del_flg = 0 AND order_id >= ? AND order_id <= ?]が入っていたため、 教えて頂いた記述から[ del_flg = 0]を削除して修正してみました。 そののち、受注日で範囲指定して、検索を行うと無事範囲の分のみの情報を出力できたのですが、 注文番号で範囲指定して、検索をおこなったところ、 DB処理でエラーが発生しました。とのことで、以下のようなエラーが出ていました。 Fatal error(E_USER_ERROR): DB処理でエラーが発生しました。 SQL: [SELECT dtb_order.order_id, dtb_order_detail.product_code, dtb_order_detail.product_name, dtb_order_detail.quantity FROM dtb_order INNER JOIN dtb_order_detail ON dtb_order.order_id = dtb_order_detail.order_id WHERE del_flg = 0 AND order_id >= ? AND order_id <= ? ORDER BY order_id DESC] MDB2 Error: unknown error _doQuery: [Error message: Could not execute statement] [Last executed query: PREPARE mdb2_statement_mysql_1149765bd7ce4298f8a082834e4ee62d5a240a480b FROM 'SELECT dtb_order.order_id, dtb_order_detail.product_code, dtb_order_detail.product_name, dtb_order_detail.quantity FROM dtb_order INNER JOIN dtb_order_detail ON dtb_order.order_id = dtb_order_detail.order_id WHERE del_flg = 0 AND order_id >= ? AND order_id <= ? ORDER BY order_id DESC'] [Native code: 1052] [Native message: Column 'order_id' in where clause is ambiguous] order_id >= ? AND order_id <= ?のところの 「?」に検索した注文番号が来ないといけないのでしょうか? 受注日で範囲指定したときは、 SELECT dtb_order.order_id, dtb_order_detail.product_code, dtb_order_detail.product_name, dtb_order_detail.quantity FROM dtb_order INNER JOIN dtb_order_detail ON dtb_order.order_id = dtb_order_detail.order_id WHERE del_flg = 0 AND create_date >= ? AND create_date <= ? ORDER BY order_id DESC というように?でも動いているのですが違いがよくわかりません。。 ちなみに実業務では注文番号で範囲指定してCSVダウンロードをおこなうので、注文番号でできるのは必須という状況です。 何か分かりますでしょうか? |
yuh |
投稿日時: 2017/10/19 13:53
対応状況: −−−
|
神 登録日: 2013/1/9 居住地: 大阪 投稿: 1819 |
Re: 受注管理画面-CSVダウンロードで検索した注文の情報のみを出力する方法(出力項目のカスタマイズ後)を教えてください。 del_flg = 0を削除すると$whereに入っているのが AND ~~~
から始まる為にクエリのエラーが起こります。 もし、del_flg=0を削除したいのであれば、del_flg = del_flgと書き換えれば対応できます ただ、del_flg = 1のデータはクレジット画面に行き戻るを押した場合にも発生するので、del_flg = 0はつけておいた方がいいかと思います。 よく見ると
この部分ってなにか別に変更って行ってますか?
|
tsurtua |
投稿日時: 2017/10/19 14:33
対応状況: −−−
|
常連 登録日: 2017/3/31 居住地: 投稿: 57 |
Re: 受注管理画面-CSVダウンロードで検索した注文の情報のみを出力する方法(出力項目のカスタマイズ後)を教えてください。 $whereに入っているのは、デバッグで確認したところ、
del_flg = 0 AND order_id >= ? AND order_id <= ? だったので、
としています。 間違っていますでしょうか?
の部分は何も変えておりません。 追記、 エラーメッセージに [Native message: Column 'order_id' in where clause is ambiguous] というのがあり、 where句のorder_idは、dtb_orderとtb_order_detailのどっちのorder_idなのか分からないよ! と怒られているみたいですね。。 これ、どうしたらカラム名付きでwhere句を指定できるのでしょうか? 注文番号で検索する場合とそうじゃない場合でも対応できるようにしておきたいので、何かここで使える関数とかあればいいなと思います。 |
yuh |
投稿日時: 2017/10/19 15:31
対応状況: −−−
|
神 登録日: 2013/1/9 居住地: 大阪 投稿: 1819 |
Re: 受注管理画面-CSVダウンロードで検索した注文の情報のみを出力する方法(出力項目のカスタマイズ後)を教えてください。 すいません、勘違いしてました。
で order_idがdtb_order_detailとdtb_orderにあるので、その部分も指定しないとダメです。
こんな感じに変更してみてください あと、buildQueryのカラム部分すべてに
こんな感じで他のカラムすべてにも 多分それで解決するかとは思います。
|
tsurtua |
投稿日時: 2017/10/19 16:41
対応状況: −−−
|
常連 登録日: 2017/3/31 居住地: 投稿: 57 |
Re: 受注管理画面-CSVダウンロードで検索した注文の情報のみを出力する方法(出力項目のカスタマイズ後)を教えてください。 buildQueryの
search_order_id1、2のところに「dtb_order.」をつけて、 おっしゃる通りにやってみましたが、うまくいきません。。 試しに、 LC_Page_Admin_Order.phpのactionの
の一行下で、 デバッグで$whereの中身を確認したところ、 「dtb_order.」 がついておりませんでした。 デバッグ自体はできているのでここを通っているはずではあると思うのですが。。 どういうことか分かりますでしょうか? 追記、 buildQueryの中、
の1行上でデバッグしたところ、ログになにも出ていませんでした。 buildQueryの中は通っていないということなんでしょうか??? |
yuh |
投稿日時: 2017/10/19 17:07
対応状況: −−−
|
神 登録日: 2013/1/9 居住地: 大阪 投稿: 1819 |
Re: 受注管理画面-CSVダウンロードで検索した注文の情報のみを出力する方法(出力項目のカスタマイズ後)を教えてください。 LC_Page_Admin_Order_Ex.phpも確認してみてください。
|
tsurtua |
投稿日時: 2017/10/19 17:16
対応状況: −−−
|
常連 登録日: 2017/3/31 居住地: 投稿: 57 |
Re: 受注管理画面-CSVダウンロードで検索した注文の情報のみを出力する方法(出力項目のカスタマイズ後)を教えてください。 できました!!!!
確かに、LC_Page_Admin_Order_Ex.phpでした。 ありがとうございます! 本当に助かりました。 後学のために質問させて頂きますが、 EXとそうじゃないファイルのどちらの処理を通っているかの判断はどうすればいいかご存知でしょうか? これからもいろいろとカスタマイズをおこなう機会は出てくると思うので、ご存知であれば教えて頂きたいです。 |
yuh |
投稿日時: 2017/10/19 18:58
対応状況: −−−
|
神 登録日: 2013/1/9 居住地: 大阪 投稿: 1819 |
Re: 受注管理画面-CSVダウンロードで検索した注文の情報のみを出力する方法(出力項目のカスタマイズ後)を教えてください。 Exに処理が書いてあればclassの方は無視されてExの処理がはしります。
好みの問題とはおもいますが、カスタマイズする場合はすべてExに書いた方が後で見た時にどの部分をカスタマイズしたかわかりやすいので、自分は全部Exに書くようにしています。
|
(1) 2 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |