色々と構文が間違っています。
$this->$request
だと、$request変数に格納されている名前の$thisのプロパティという意味になります。何もしていなければ $request = null
なので、$this->(null)
ということでエラーが発生するはずです。
$this->request
が正しいです。
$this->request->data()
(CakeRequest::dataメソッド)は、$_POST['data']の配列からドット区切りで値を取得します。
POST データにアクセス | リクエストとレスポンスオブジェクト - 2.x
$this->request->data('Person.person_answer_exists' === 1)
と書くと、'Person.person_answer_exists' === 1
の方が先に評価されますので、$this->request->data(false)
と同義です。
これは、(int)$this->request->data('Person.person_answer_exists') === 1
と書きましょう。
(int)
を頭に付けているのは整数型に型変換するためです。
POSTデータは通常文字列として得られます。1
ではなく'1'
が返ってきます。
===
は型を含めた比較ですので、型変換をしないと'1' === 1
の比較となり false になります。
厳密に判定するなら上記の書き方ですが、値が0,1しかないのであれば、 if ($this->request->data('Person.person_answer_exists'))
でも大丈夫です。
$condition[ 'Person.pe_contents' ] != ''
は、$condition配列の'Person.pe_contents'キーと、空文字列を比較しているだけで代入をしていません。
Person.pe_contentsが空文字のレコードに制限したいのであれば、
$condition['Person.pe_contents !='] = ''
とします。
ただし、pe_contentsにNULL制約があり、nullは格納されていないことが保証されていないと意図した結果にならないと思います。
その場合、Person.pe_contents IS NOT NULL
も条件に加えると良いでしょう。
また、モデルのfind関数の条件パラメーター名はconditions
ですので変数名も合わせておくと色々と楽です。
以上をふまえると、以下になります。
php
1if((int)$this->request->data('Person.person_answer_exists') === 1){
2 $conditions['Person.pe_contents !='] = '';
3 $conditions[] = 'Person.pe_contents IS NOT NULL'; // これはDBスキーマ次第で必要
4}
追記
person_answer_existsが複数値(multiple)ということなので、$this->request->data('Person.person_answer_exists')
の返り値は、['1']
, ['2']
, ['1', '2']
, null
のいずれかになりますよね。
POSTされる値が配列なので in_array
を使ってフラグが指定されてるか確認します。
PHP: in_array - Manual
また、条件が複数指定された場合にいずれかに該当するレコードを取得したいのであれば条件を OR で繋ぎます。
複雑な検索条件 - データを取得する - 2.x
php
1$personAnswerExists = $this->request->data('Person.person_answer_exists');
2
3if ($personAnswerExists !== null) { // person_answer_existsが指定されていなければ null が返るので除外しておきます。
4 $personAnswerExists = array_map('intval', (array)$personAnswerExists); // 配列化して、個々の値を整数変換しています
5
6 $conditions['OR'] = [];
7
8 if (in_array(1, $personAnswerExists, true)) {
9 $conditions['OR'][] = ['Person.pe_contents !=' => ''];
10 }
11
12 if (in_array(2, $personAnswerExists, true)) {
13 $conditions['OR'][] = ['Person.pe_contents' => ''];
14 }
15}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/01 01:15
2020/05/01 02:53
2020/05/01 03:06
2020/05/01 03:08
2020/05/01 03:11
2020/05/01 03:14
2020/05/01 03:33
2020/05/01 03:35
2020/05/01 03:53
2020/05/01 04:49
2020/05/01 05:57
2020/05/01 06:03 編集
2020/05/01 06:24