teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

ソースの修正

2017/09/23 01:07

投稿

red13
red13

スコア79

title CHANGED
File without changes
body CHANGED
@@ -20,7 +20,29 @@
20
20
  // ここでさらにループしたり
21
21
  <?php endforeach; ?>
22
22
  ```
23
+ ```
24
+ *** SQLの結果の格納オブジェクト? ***
25
+ class Product extends sfDoctrineRecord {
26
+ // メインテーブル?
27
+ public function setTableDefinition() {
28
+ $this->setTableName('product');
29
+ $this->hasColumn('name', 'string', 255, array(
30
+ 'type' => 'string',
31
+ 'length' => '255',
32
+ ));
33
+ // 他複数のhasColumn
34
+ }
23
35
 
36
+ // 結合テーブルの設定?
37
+ public function setMany() {
38
+ $this->hasMany('hoge2', array(
39
+ 'local' => 'mst_id',
40
+ 'foreign' => 'id'
41
+ ));
42
+ // 他複数のhasMany
43
+ }
44
+ }
45
+ ```
24
46
  このCSV出力がとても遅く、改修する必要が出てきました。
25
47
  調査したところ、DBからのデータ取得は問題なく、②のループ処理で極端に遅いことがわかりました。
26
48
  3重ループほどしているのが原因だと思います。

2

ソース修正

2017/09/23 01:07

投稿

red13
red13

スコア79

title CHANGED
File without changes
body CHANGED
@@ -3,18 +3,24 @@
3
3
  以下の「取得したデータをループしてCSVのデータに設定する」ような処理が実装されています。
4
4
 
5
5
  ```
6
+ *** アクションクラス ***
6
- // ソースは適当
7
+ // SQL作る?
8
+ $sql = Doctrine_Query::create()->from('test t');
9
+ $sql->addWhere('t.id = ?', $id);
7
- // ①DBからデータ取得
10
+ // 他条件追加したり
8
- $sqlData = ~;
9
11
 
10
- // ②ループしてCSV設定
12
+ // SQL発行して変数設定
13
+ $this->csvData = $sql->getQuery()->execute();
14
+ // 設定した変数はテンプレートphpで使用する
15
+ ```
16
+ ```
17
+ *** テンプレートphp ***
11
- foreach ($sqlData) {
18
+ <?php foreach($csvData as $dataObj): ?>
19
+ <?php echo $dataObj->getId() ?>
12
- // 1件ずつデタを設定する。
20
+ // ここでさらにルプしたり
13
- $csvData .= ~;
21
+ <?php endforeach; ?>
14
- }
22
+ ```
15
23
 
16
- // ③CSVダウンロードさせる
17
- ```
18
24
  このCSV出力がとても遅く、改修する必要が出てきました。
19
25
  調査したところ、DBからのデータ取得は問題なく、②のループ処理で極端に遅いことがわかりました。
20
26
  3重ループほどしているのが原因だと思います。

1

タグ修正

2017/09/22 23:50

投稿

red13
red13

スコア79

title CHANGED
File without changes
body CHANGED
File without changes