回答編集履歴
2
combineで日付オブジェクトを取り扱う方法の追記
test
CHANGED
@@ -241,3 +241,37 @@
|
|
241
241
|
|
242
242
|
|
243
243
|
なお、レコード件数によっては、データベース側でサブクエリなどを用いて希望の形式の形式を取得するSQLを発行したほうがよい場合もあります。上記はあくまでデータ件数がそこまで多くない場合の方法と考えてください。
|
244
|
+
|
245
|
+
|
246
|
+
|
247
|
+
-----
|
248
|
+
|
249
|
+
|
250
|
+
|
251
|
+
## 追記 combineで日付オブジェクトを取り扱う
|
252
|
+
|
253
|
+
|
254
|
+
|
255
|
+
`date` フィールドが日付型だったということで、 `combine('date', 'info', 'person_id')` でIllegal offset typeエラーが生じていたようなのでその対処法です。combineは引数に関数を指定できます。これを利用してdateフィールド値を文字列として返します。
|
256
|
+
|
257
|
+
|
258
|
+
|
259
|
+
```php
|
260
|
+
|
261
|
+
combine(static function ($entity) {
|
262
|
+
|
263
|
+
// dateフィールドの型を判定して日時型であれば文字列フォーマットして返す
|
264
|
+
|
265
|
+
if ($entity->date instanceof \DateTimeInterface) {
|
266
|
+
|
267
|
+
return $entity->date->format('Y-m-d');
|
268
|
+
|
269
|
+
}
|
270
|
+
|
271
|
+
|
272
|
+
|
273
|
+
return (string)$entity->date;
|
274
|
+
|
275
|
+
}, 'info', 'person_id')
|
276
|
+
|
277
|
+
```
|
1
前提の追記
test
CHANGED
@@ -1,4 +1,74 @@
|
|
1
|
-
|
1
|
+
こまかい表示方式はさておき、何を表示したいのかといえば `person_id別の各dateにおけるinfo` ですね。
|
2
|
+
|
3
|
+
ということは、以下のようなデータ形式が取得できればよいはずです。
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
```php
|
8
|
+
|
9
|
+
[
|
10
|
+
|
11
|
+
"{person_id}" => [
|
12
|
+
|
13
|
+
"{date}" => "{info}",
|
14
|
+
|
15
|
+
...
|
16
|
+
|
17
|
+
],
|
18
|
+
|
19
|
+
...
|
20
|
+
|
21
|
+
]
|
22
|
+
|
23
|
+
// 実際にはこんな感じ
|
24
|
+
|
25
|
+
[
|
26
|
+
|
27
|
+
"2160001" => [
|
28
|
+
|
29
|
+
"2020-01-15" => 1,
|
30
|
+
|
31
|
+
"2020-01-22" => 1,
|
32
|
+
|
33
|
+
],
|
34
|
+
|
35
|
+
"2160002" => [
|
36
|
+
|
37
|
+
"2020-01-15" => -2,
|
38
|
+
|
39
|
+
"2020-01-22" => 1,
|
40
|
+
|
41
|
+
],
|
42
|
+
|
43
|
+
]
|
44
|
+
|
45
|
+
```
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
Tableのfindによって取得できる形は以下のようなものなので、これを変換します。
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
```php
|
54
|
+
|
55
|
+
// 本当はResultSet/Entityクラスの集合だが便宜的に配列として表記
|
56
|
+
|
57
|
+
[
|
58
|
+
|
59
|
+
['id' => 6, 'person_id' => '2160001', 'subject_id' => '481052', 'date' => '2020-01-15', 'info' => 1],
|
60
|
+
|
61
|
+
['id' => 7, 'person_id' => '2160002', 'subject_id' => '481052', 'date' => '2020-01-15', 'info' => -2].
|
62
|
+
|
63
|
+
...
|
64
|
+
|
65
|
+
]
|
66
|
+
|
67
|
+
```
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
変換の方法は色々考えられるのですが、結果はResultSetなので [Collection](https://book.cakephp.org/3/ja/core-libraries/collections.html#id3) のメソッドが利用できます。なので、[Collection::combine](https://book.cakephp.org/3/ja/core-libraries/collections.html#Cake\Collection\Collection::combine) を利用して結果セットを整形するのが手っ取り早いでしょう。
|
2
72
|
|
3
73
|
|
4
74
|
|