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

質問編集履歴

2

キャプチャを追加しまいした。

2018/07/03 07:08

投稿

odaiki
odaiki

スコア8

title CHANGED
File without changes
body CHANGED
@@ -29,6 +29,8 @@
29
29
  ・既読ステータス検索(selectbox)
30
30
  上記、4つです。
31
31
 
32
+ ![イメージ説明](6f10e41fa105a3f0a10ee6a5fd2b29f4.jpeg)
33
+
32
34
  ```
33
35
  $informations = $this->Informations->find()
34
36
  ->contain(['Cases', 'Categories', 'Users'])

1

依頼内容が分かりにくいと指摘を頂いたので修正いたしました。

2018/07/03 07:08

投稿

odaiki
odaiki

スコア8

title CHANGED
@@ -1,1 +1,1 @@
1
- Cakephp3 リビルダで困ってます。
1
+ Cakephp3 find ラー
body CHANGED
@@ -1,5 +1,9 @@
1
- Cakephp3 クエリビルダで困ってます
1
+ Cakephp3 クエリビルダで困ってます
2
2
 
3
+ informationsテーブルにはcase・categoryの2つのテーブルが「多 対 1」の関係でリレーション
4
+ informations_usersテーブルでは「多 対 多」でリレーションしています。
5
+
6
+ ```
3
7
  CREATE TABLE `informations` (
4
8
  `id` int(11) NOT NULL,
5
9
  `title` varchar(255) NOT NULL COMMENT '件名',
@@ -16,8 +20,7 @@
16
20
  `read_flag` varchar(255) NOT NULL COMMENT '既読ステータス'
17
21
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
18
22
 
19
- informationsテーブルにはcase・categoryの2つのテーブルが「多 対 1」の関係でリレーション
20
- informations_usersテーブルでは「多 対 多」でリレーションしています。
23
+ ```
21
24
 
22
25
  実装したい検索フィルターは、
23
26
  ・title検索(inputbox)
@@ -26,5 +29,25 @@
26
29
  ・既読ステータス検索(selectbox)
27
30
  上記、4つです。
28
31
 
32
+ ```
33
+ $informations = $this->Informations->find()
34
+ ->contain(['Cases', 'Categories', 'Users'])
35
+ ->where([
36
+ 'Informations.title like' => $this->request->data('title'),
37
+ 'Informations.projectcase_id' => $this->request->data('case_id'),
38
+ 'Informations.projectcase_id' => $this->request->data('category_id'),
39
+ ])
40
+ ->matching('Users', function($q){
41
+ $person_id = $this->request->session()->read('Auth.User.id');
42
+ $data = $this->request->data('users')[0]['_read_flag'];
43
+ return $q
44
+ ->where([
45
+ 'InformationsUsers.user_id' => $person_id,
46
+ 'InformationsUsers.read_flag' => $data,
47
+ ]);
48
+ });
49
+ ```
50
+ 上記コードではエラーが発生してしまいました。
51
+
29
52
  if文ですべてのパターンを書かない方法を教えてください。
30
53
  よろしくお願い致します。