回答編集履歴

5

表記

2016/10/23 11:14

投稿

popobot
popobot

スコア6586

test CHANGED
@@ -30,20 +30,20 @@
30
30
 
31
31
  ```php
32
32
 
33
- $query = $this-> Purchases->find();
33
+ $query = $this-> Purchases->find();
34
34
 
35
- $date = $query->func()->date_format([
35
+ $date = $query->func()->date_format([
36
36
 
37
- 'date' => 'identifier',
37
+ 'date' => 'identifier',
38
38
 
39
- "'%Y-%m'" => 'literal'
39
+ "'%Y-%m'" => 'literal'
40
40
 
41
- ]);
41
+ ]);
42
42
 
43
- $date_filter = $query->select(['date' => $date])->group('date')->order(['date'])->all()->toArray();
43
+ $date_filter = $query->select(['date' => $date])->group('date')->order(['date'])->all()->toArray();
44
44
 
45
- $date_filter = \Cake\Utility\Hash::extract($date_filter, '{n}.date');
45
+ $date_filter = \Cake\Utility\Hash::extract($date_filter, '{n}.date');
46
46
 
47
- $this->set(compact('date_filter'));
47
+ $this->set(compact('date_filter'));
48
48
 
49
49
  ```

4

追記

2016/10/23 11:14

投稿

popobot
popobot

スコア6586

test CHANGED
@@ -21,3 +21,29 @@
21
21
 
22
22
 
23
23
  ※そもそもfindで年月のリストを作ったほうがいいかもですね
24
+
25
+
26
+
27
+ **(追記)**
28
+
29
+ 参考にfindでやる方法を追記しておきます
30
+
31
+ ```php
32
+
33
+ $query = $this-> Purchases->find();
34
+
35
+ $date = $query->func()->date_format([
36
+
37
+ 'date' => 'identifier',
38
+
39
+ "'%Y-%m'" => 'literal'
40
+
41
+ ]);
42
+
43
+ $date_filter = $query->select(['date' => $date])->group('date')->order(['date'])->all()->toArray();
44
+
45
+ $date_filter = \Cake\Utility\Hash::extract($date_filter, '{n}.date');
46
+
47
+ $this->set(compact('date_filter'));
48
+
49
+ ```

3

訂正(年月のリストが欲しかったのか\.\.\.)

2016/10/23 11:13

投稿

popobot
popobot

スコア6586

test CHANGED
@@ -8,9 +8,9 @@
8
8
 
9
9
  debug($purchase->date->format('Y-m'));
10
10
 
11
- if(in_array($purchase->date->format('Y-m'), ['2016-10', '2016-09'])) {
11
+ if(!in_array($purchase->date->format('Y-m'), $date_filter)) {
12
12
 
13
- array_push($date_filter, $purchase);
13
+ array_push($date_filter, $purchase->date->format('Y-m'));
14
14
 
15
15
  }
16
16
 
@@ -20,32 +20,4 @@
20
20
 
21
21
 
22
22
 
23
- ただできれば、findのwhereでフィルタしがいいしま
23
+ ※そもそもfindで年月リストを作っほうがいい
24
-
25
-
26
-
27
- **(追記)**
28
-
29
- findでwhereでDATE_FORMATかつINを使うサンプルを作ったので載せておきます。
30
-
31
- ※ただし、思ったより複雑なfindを使わないとできないみたいです...。
32
-
33
- ```php
34
-
35
- $date_filter = $this-> Purchases->find()->where(function ($exp, $q) {
36
-
37
- $date = $q->func()->date_format([
38
-
39
- 'date' => 'identifier',
40
-
41
- "'%Y-%m'" => 'literal'
42
-
43
- ]);
44
-
45
- return $exp->in($date, ['2016-09', '2016-10']);
46
-
47
- })->all();
48
-
49
- $this->set(compact('date_filter'));
50
-
51
- ```

2

追記

2016/10/23 10:56

投稿

popobot
popobot

スコア6586

test CHANGED
@@ -21,3 +21,31 @@
21
21
 
22
22
 
23
23
  ただできれば、findのwhereでフィルタした方がいい気もします。
24
+
25
+
26
+
27
+ **(追記)**
28
+
29
+ findでwhereでDATE_FORMATかつINを使うサンプルを作ったので載せておきます。
30
+
31
+ ※ただし、思ったより複雑なfindを使わないとできないみたいです...。
32
+
33
+ ```php
34
+
35
+ $date_filter = $this-> Purchases->find()->where(function ($exp, $q) {
36
+
37
+ $date = $q->func()->date_format([
38
+
39
+ 'date' => 'identifier',
40
+
41
+ "'%Y-%m'" => 'literal'
42
+
43
+ ]);
44
+
45
+ return $exp->in($date, ['2016-09', '2016-10']);
46
+
47
+ })->all();
48
+
49
+ $this->set(compact('date_filter'));
50
+
51
+ ```

1

訂正

2016/10/23 10:47

投稿

popobot
popobot

スコア6586

test CHANGED
@@ -6,9 +6,9 @@
6
6
 
7
7
  foreach($purchases as $purchase) {
8
8
 
9
- debug($purchase->date1->format('Y-m'));
9
+ debug($purchase->date->format('Y-m'));
10
10
 
11
- if(in_array($purchase->date1->format('Y-m'), ['2016-10', '2016-09'])) {
11
+ if(in_array($purchase->date->format('Y-m'), ['2016-10', '2016-09'])) {
12
12
 
13
13
  array_push($date_filter, $purchase);
14
14