質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Q&A

解決済

1回答

292閲覧

Cakephp3 find エラー

odaiki

総合スコア8

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

0グッド

0クリップ

投稿2018/07/03 06:34

編集2018/07/03 07:08

Cakephp3 クエリビルダで困ってます。

informationsテーブルにはcase・categoryの2つのテーブルが「多 対 1」の関係でリレーション
informations_usersテーブルでは「多 対 多」でリレーションしています。

CREATE TABLE `informations` ( `id` int(11) NOT NULL, `title` varchar(255) NOT NULL COMMENT '件名', `content` text NOT NULL COMMENT '内容', `case_id` int(11) NOT NULL COMMENT 'INFO_案件ID', `category_id` int(11) NOT NULL COMMENT 'INFO_カテゴリーID', `created` datetime DEFAULT NULL, `modified` datetime DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT; CREATE TABLE `informations_users` ( `information_id` int(11) NOT NULL, `users_id` int(11) NOT NULL, `read_flag` varchar(255) NOT NULL COMMENT '既読ステータス' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

実装したい検索フィルターは、
・title検索(inputbox)
・案件検索(selectbox)
・カテゴリー検索(selectbox)
・既読ステータス検索(selectbox)
上記、4つです。

イメージ説明

$informations = $this->Informations->find() ->contain(['Cases', 'Categories', 'Users']) ->where([ 'Informations.title like' => $this->request->data('title'), 'Informations.projectcase_id' => $this->request->data('case_id'), 'Informations.projectcase_id' => $this->request->data('category_id'), ]) ->matching('Users', function($q){ $person_id = $this->request->session()->read('Auth.User.id'); $data = $this->request->data('users')[0]['_read_flag']; return $q ->where([ 'InformationsUsers.user_id' => $person_id, 'InformationsUsers.read_flag' => $data, ]); });

上記コードではエラーが発生してしまいました。

if文ですべてのパターンを書かない方法を教えてください。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/07/03 06:43

プログラムコード(およびエラーメッセージ)は質問内容としては最も重要な部分であるため、見やすくしていただけると助かります。<code>ボタン押下→「コード」部分にコードを貼り付け→「ここに言語を入力」に対象言語名記入(エラーメッセージの場合は不要)の手順で「コードハイライト化」してください。(質問編集画面ではリアルタイムでプレビューが表示されるので見ながら調整してください)
odaiki

2018/07/03 07:03

ご指摘ありがとうございます。
odaiki

2018/07/03 07:03

依頼内容を修正いたしました。
guest

回答1

0

ベストアンサー

すべてのパターンを書かない、の意味が今一つ不明ですが……

一般に ORM では、

PHP

1$query = $this->information->find(); 2$query->where(条件1); 3if ($this->request->data('title') != '') { 4 $query->andWhere(['information.title like' => $this->request->data('title')]); 5} 6if ($this->request->data('case_id') != '') { 7 $query->andWhere(['information.projectcase_id' => $this->request->data('case_id')]); 8} 9...

のように、いっぺんに where を作る必要はありません。

投稿2018/07/03 07:55

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問