現在、Cakephp3にてブログサイトを作ろうとしています。その際に記事の検索機能を実装しようとして次のような検索を考えています。
初学者でして、基本的な所で恐縮ですが、ご教授お願いします。
環境:
php:7.1.1
Apache/2.4.25 (Win32)
cakephp:3.2.11
MySQL:10.1.21-MariaDB
①記事をカテゴリー(category)で分けて、閲覧できるようにして、そこからカテゴリー毎に検索できるようにしたい。
(カテゴリによらず、全記事一覧からも検索できるようにもしたい)
②カテゴリー毎に「記事タイトル」(title)「記事の作者名」(username)「記事の文章内容」(content)の3つのカラムのいずれかに検索キーワードがあるか検索する。
上記の検索を実装する為にCakephpのfind関数を用いて、次のようなコードを書きました。
テーブルは3つあり、連携させています。
Categories:カテゴリー情報
Users:ユーザー情報
Articles:記事情報
$keywordはフォームから入力された検索キーワード(GETで取得) $query = $this->Articles->find() ->contain(['Categories','Users']) ->where(['Categories.id' => $category,'title like ' => '%'.$keyword.'%']) ->orWhere(['Categories.id' => $category,'Users.username like ' => '%'.$keyword.'%']) ->orWhere(['Categories.id' => $category,'content like ' => '%'.$keyword.'%']);
上記のコードで実行した場合には、カテゴリーの条件をA タイトルの条件をB 作者条件をC 記事の内容条件をDとすると
{(AandB)or(AandC)or(AandD)}となってほしかったのですが、実際はデバグキットでSQL文を確認すると
{(AandB)or(AandC)orAorD}となっていました。
対策を教えて頂きたくよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。