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

回答編集履歴

5

表記

2016/10/23 11:14

投稿

popobot
popobot

スコア6588

answer CHANGED
@@ -14,12 +14,12 @@
14
14
  **(追記)**
15
15
  参考にfindでやる方法を追記しておきます
16
16
  ```php
17
- $query = $this-> Purchases->find();
17
+ $query = $this-> Purchases->find();
18
- $date = $query->func()->date_format([
18
+ $date = $query->func()->date_format([
19
- 'date' => 'identifier',
19
+ 'date' => 'identifier',
20
- "'%Y-%m'" => 'literal'
20
+ "'%Y-%m'" => 'literal'
21
- ]);
21
+ ]);
22
- $date_filter = $query->select(['date' => $date])->group('date')->order(['date'])->all()->toArray();
22
+ $date_filter = $query->select(['date' => $date])->group('date')->order(['date'])->all()->toArray();
23
- $date_filter = \Cake\Utility\Hash::extract($date_filter, '{n}.date');
23
+ $date_filter = \Cake\Utility\Hash::extract($date_filter, '{n}.date');
24
- $this->set(compact('date_filter'));
24
+ $this->set(compact('date_filter'));
25
25
  ```

4

追記

2016/10/23 11:14

投稿

popobot
popobot

スコア6588

answer CHANGED
@@ -9,4 +9,17 @@
9
9
  }
10
10
  ```
11
11
 
12
- ※そもそもfindで年月のリストを作ったほうがいいかもですね
12
+ ※そもそもfindで年月のリストを作ったほうがいいかもですね
13
+
14
+ **(追記)**
15
+ 参考にfindでやる方法を追記しておきます
16
+ ```php
17
+ $query = $this-> Purchases->find();
18
+ $date = $query->func()->date_format([
19
+ 'date' => 'identifier',
20
+ "'%Y-%m'" => 'literal'
21
+ ]);
22
+ $date_filter = $query->select(['date' => $date])->group('date')->order(['date'])->all()->toArray();
23
+ $date_filter = \Cake\Utility\Hash::extract($date_filter, '{n}.date');
24
+ $this->set(compact('date_filter'));
25
+ ```

3

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

2016/10/23 11:13

投稿

popobot
popobot

スコア6588

answer CHANGED
@@ -3,24 +3,10 @@
3
3
  $date_filter = array();
4
4
  foreach($purchases as $purchase) {
5
5
  debug($purchase->date->format('Y-m'));
6
- if(in_array($purchase->date->format('Y-m'), ['2016-10', '2016-09'])) {
6
+ if(!in_array($purchase->date->format('Y-m'), $date_filter)) {
7
- array_push($date_filter, $purchase);
7
+ array_push($date_filter, $purchase->date->format('Y-m'));
8
8
  }
9
9
  }
10
10
  ```
11
11
 
12
- ただできれば、findのwhereフィルタしがいいしま
12
+ ※そもそもfindで年月のリストを作っほうがいい
13
-
14
- **(追記)**
15
- findでwhereでDATE_FORMATかつINを使うサンプルを作ったので載せておきます。
16
- ※ただし、思ったより複雑なfindを使わないとできないみたいです...。
17
- ```php
18
- $date_filter = $this-> Purchases->find()->where(function ($exp, $q) {
19
- $date = $q->func()->date_format([
20
- 'date' => 'identifier',
21
- "'%Y-%m'" => 'literal'
22
- ]);
23
- return $exp->in($date, ['2016-09', '2016-10']);
24
- })->all();
25
- $this->set(compact('date_filter'));
26
- ```

2

追記

2016/10/23 10:56

投稿

popobot
popobot

スコア6588

answer CHANGED
@@ -9,4 +9,18 @@
9
9
  }
10
10
  ```
11
11
 
12
- ただできれば、findのwhereでフィルタした方がいい気もします。
12
+ ただできれば、findのwhereでフィルタした方がいい気もします。
13
+
14
+ **(追記)**
15
+ findでwhereでDATE_FORMATかつINを使うサンプルを作ったので載せておきます。
16
+ ※ただし、思ったより複雑なfindを使わないとできないみたいです...。
17
+ ```php
18
+ $date_filter = $this-> Purchases->find()->where(function ($exp, $q) {
19
+ $date = $q->func()->date_format([
20
+ 'date' => 'identifier',
21
+ "'%Y-%m'" => 'literal'
22
+ ]);
23
+ return $exp->in($date, ['2016-09', '2016-10']);
24
+ })->all();
25
+ $this->set(compact('date_filter'));
26
+ ```

1

訂正

2016/10/23 10:47

投稿

popobot
popobot

スコア6588

answer CHANGED
@@ -2,8 +2,8 @@
2
2
  ```php
3
3
  $date_filter = array();
4
4
  foreach($purchases as $purchase) {
5
- debug($purchase->date1->format('Y-m'));
5
+ debug($purchase->date->format('Y-m'));
6
- if(in_array($purchase->date1->format('Y-m'), ['2016-10', '2016-09'])) {
6
+ if(in_array($purchase->date->format('Y-m'), ['2016-10', '2016-09'])) {
7
7
  array_push($date_filter, $purchase);
8
8
  }
9
9
  }