回答編集履歴

2

multipleに対応した回答に修正しています。

2020/05/01 06:30

投稿

nojimage
nojimage

スコア959

test CHANGED
@@ -87,3 +87,63 @@
87
87
  }
88
88
 
89
89
  ```
90
+
91
+
92
+
93
+ ## 追記
94
+
95
+
96
+
97
+ person_answer_existsが複数値(multiple)ということなので、`$this->request->data('Person.person_answer_exists')` の返り値は、`['1']`, `['2']`, `['1', '2']`, `null` のいずれかになりますよね。
98
+
99
+
100
+
101
+ POSTされる値が配列なので `in_array` を使ってフラグが指定されてるか確認します。
102
+
103
+
104
+
105
+ [PHP: in_array - Manual](https://www.php.net/manual/ja/function.in-array)
106
+
107
+
108
+
109
+ また、条件が複数指定された場合にいずれかに該当するレコードを取得したいのであれば条件を OR で繋ぎます。
110
+
111
+
112
+
113
+ [複雑な検索条件 - データを取得する - 2.x](https://book.cakephp.org/2/ja/models/retrieving-your-data.html#id5)
114
+
115
+
116
+
117
+ ```php
118
+
119
+ $personAnswerExists = $this->request->data('Person.person_answer_exists');
120
+
121
+
122
+
123
+ if ($personAnswerExists !== null) { // person_answer_existsが指定されていなければ null が返るので除外しておきます。
124
+
125
+ $personAnswerExists = array_map('intval', (array)$personAnswerExists); // 配列化して、個々の値を整数変換しています
126
+
127
+
128
+
129
+ $conditions['OR'] = [];
130
+
131
+
132
+
133
+ if (in_array(1, $personAnswerExists, true)) {
134
+
135
+ $conditions['OR'][] = ['Person.pe_contents !=' => ''];
136
+
137
+ }
138
+
139
+
140
+
141
+ if (in_array(2, $personAnswerExists, true)) {
142
+
143
+ $conditions['OR'][] = ['Person.pe_contents' => ''];
144
+
145
+ }
146
+
147
+ }
148
+
149
+ ```

1

表記修正

2020/05/01 06:30

投稿

nojimage
nojimage

スコア959

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- `$this->$request` だと、$request変数に格納されている名前の$thisのプロパティという意味になります。何もしていなければ `$request = null`なので、`$this->(null)` ということで構文エラーとなるはずです。
5
+ `$this->$request` だと、$request変数に格納されている名前の$thisのプロパティという意味になります。何もしていなければ `$request = null`なので、`$this->(null)` ということでエラーが発生するはずです。
6
6
 
7
7
 
8
8
 
@@ -32,7 +32,7 @@
32
32
 
33
33
  POSTデータは通常文字列として得られます。`1`ではなく`'1'`が返ってきます。
34
34
 
35
- `===`は型を含めた比較ですので、型変換なしだと`'1' === 1`の比較となり false になります。
35
+ `===`は型を含めた比較ですので、型変換をしと`'1' === 1`の比較となり false になります。
36
36
 
37
37
 
38
38