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

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

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

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

1回答

3785閲覧

CakePHP3の検索結果をCSV出力したいです。

ssk

総合スコア332

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2017/05/21 09:05

###発生している問題・エラーメッセージ
exportアクションの引数$searchListが検索結果ではなく、全てを取得してしまいます。検索結果をexportアクションに持っていきたいのですが、どのように書いたら良いのでしょうか。

###該当のソースコード

PHP

1public function index() 2 { 3 $query = $this->Dbackorders->find()4 5 if($this->request->is('get')){ 6 $request = $this->request->query; 7 $freeword_str = isset($request['freeword']) && $request['freeword'] !== '' ? $request['freeword'] : FALSE; 8 9 if(isset($freeword_str) && $freeword_str !== FALSE){ 10 $fileds = ['カラム名','カラム名']; 11 12 $arr = []; 13 foreach ($fileds as $filed) { 14 $key = sprintf('%s LIKE', $filed); 15 $val = "%{$freeword_str}%"; 16 $arr[$key] = $val; 17 } 18 19 $query->where([ 20 'OR' => $arr 21 ]); 22 } 23 24 //CSV出力がクリックされた場合は検索結果を持ってる$queryを引数にexport()アクションへ 25 if($this->request->query('csv') === 'export'){ 26 $searchList = $query->hydrate(false)->toArray(); 27 $this->setAction('export',$searchList); 28 } 29 30 $dbackorders = $this->paginate($query); 31 $this->set('CheckBox', Configure::read('CheckBox')); 32 $this->set(compact('dbackorders')); 33 $this->set('_serialize', ['dbackorders']); 34 $this->set('title', 'テスト'); 35 } 36 37 public function export($searchList){ 38 39 $Export_Table = TableRegistry::get('Export_Dbackorders'); 40 $clumns = $Export_Table->find('all')->combine('value','name')->toArray(); 41 42 if($this->request->is('post')){ 43 44 $request = $this->request->data; 45 $select_clumns = isset($request['select_clumns']) && $request['select_clumns'] !== '' ? $request['select_clumns'] : FALSE; 46 47 stream_filter_register('eolFilter', 'App\\Filters\\CsvEolFilterHelper'); 48 stream_filter_register('encodeFilter', 'App\\Filters\\CsvEncodeFilterHelper'); 49 50 $results = $searchList; 51 52 $fp = fopen('php://output', 'w'); 53 54 // フィルタを開いたストリームに付加する 55 stream_filter_append($fp, 'eolFilter'); 56 stream_filter_append($fp, 'encodeFilter'); 57 58 // ダウンロードさせる 59 header('Content-Type: text/csv'); 60 header('Content-Disposition: attachment; filename="テスト.csv"'); 61 62 include ('../config/myconf/csvExport/Dbackorders.php'); 63 64 $this->autoRender = false; 65 66 //////////////////////////////////////////////////////////// 67 //fclose — オープンされたファイルポインタをクローズする 68 //////////////////////////////////////////////////////////// 69 70 fclose($fp); 71 } 72 $this->set('clumns', $clumns); 73 $this->set('title', 'CSVエクスポート'); 74 }

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

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

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

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

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

guest

回答1

0

どういうクエリが発行されているかdebugkitで確認してみましたか?

投稿2017/05/21 17:57

imamoto_browser

総合スコア1161

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

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

ssk

2017/05/22 02:47

ありがとうございます。 debugkitで確認したところ、検索条件がexportアクションで引き継げていませんでした。indexアクションの$queryを引数に受け取るだけでは不十分でしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問