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

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

ただいまの
回答率

91.36%

  • PHP

    15165questions

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

  • CakePHP

    1940questions

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

cakephp でSearchプラグインでキーワードと複数のチェックボックなど色々な検索をしたいです。

解決済

回答 1

投稿 2017/11/21 17:56 ・編集 2017/11/22 16:02

  • 評価
  • クリップ 0
  • VIEW 31

akobayashi

score 6

現在cakephp 2.x(もうちょっとで3に以降予定です)
で、検索機能を作っていますが、Search プラグインを使っておりますが、
ハマってしまいうまくできません。サイトもぐぐってみましたが、
イマイチやりたいことと合わず駆け込み的にこちらで質問させていただきます。
※やりたいこと
複数のチェックボックスや、キーワードを組み合わせて絞込検索を作りたいです。

例:https://hoiku-shigoto.com/
このサイトの「こだわり条件から探す」みたいなシステムにしたいです。

ちなみに、うまく行かなかったコードが以下です。

モデル
class User extends AppModel{
public $belongsTo = array('Region','Sregion','Money','Shokushu','Koyou');
public $actsAs = array('Search.Searchable');
public $filterArgs = array(
'keyword' => array('type' => 'like','field' => array('User.title','User.username','User.email','User.comment'), 'connectorAnd' => ' ', 'connectorOr' => ''),
'caram_id' => array('type' => 'subquery','method' => 'searchIn','field' => array('User.region_id','User.sregion_id','User.money_id','User.shokushu_id','User.koyou_id')),

);

コントローラー

class UsersController extends AppController {
public $components = array('Search.Prg');
public $presetVars = true;

public function index() {
$this->User->recursive = 0;
$this->Prg->commonProcess();
$this->paginate = array(
'conditions' => $this->User->parseCriteria($this->passedArgs),
);
$this->set('post', $this->paginate());
}

}

カテゴリーをつけるために$belongsToで紐付けています。
これらのカテゴリーをviewではチェックボックスみたいに表示させて、
キーワードも含ませて検索したいです。

もしかしたらSearchプラグインを使わないほうがやりやすいのかも?と今思っております・
何卒よろしくお願いいたします・

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

モデル
<?php

App::uses('AppModel','Model');

class Bottom extends AppModel{
public $belongsTo = array('Region','Sregion','Money','Shokushu','Koyou');
public $order = array('Bottom.id DESC');
public $actsAs = array('Search.Searchable');
public $filterArgs = array(
'keyword' => array('type' => 'like','field' => array('Bottom.title','Bottom.comment','Bottom.username','Bottom.email'), 'connectorAnd' => '+', 'connectorOr' => ','),
'koyou_id' => array('type' => 'value','field' => array('Bottom.koyou_id')),
'money_id' => array('type' => 'value','field' => array('Bottom.money_id')),
'region_id' => array('type' => 'value','field' => array('Bottom.region_id')),
'sregion_id' => array('type' => 'value','field' => array('Bottom.sregion_id')),
'shokushu_id' => array('type' => 'value','field' => array('Bottom.shokushu_id')),
);

}

コントローラ
public function find() {

$this->Bottom->recursive = 0;
$this->Prg->commonProcess();
$this->paginate = array(
'conditions' => $this->Bottom->parseCriteria($this->passedArgs),
);
$this->set('data', $this->paginate());

$this->set('list1',$this->Bottom->Koyou->find('list',array('fields'=>array('id','koyou_name'))));
$this->set('list2',$this->Bottom->Money->find('list',array('fields'=>array('id','money_cate'))));
$this->set('list3',$this->Bottom->Region->find('list',array('fields'=>array('id','region_name'))));
$this->set('list4',$this->Bottom->Sregion->find('list',array('fields'=>array('id','sregion_name'))));
$this->set('list5',$this->Bottom->Shokushu->find('list',array('fields'=>array('id','shokushu_name'))));

}

ヴュー

<h1>検索機能</h1>
<div class="row-fluid">
<div class="span9">

<?= $this->Form->create('Bottom');?>
<?= $this->Form->input('keyword',array('type' => 'text','label' => 'キーワード検索'));?>
<?= $this->Form->input('koyou_id',array('type' => 'select','options' => $list1,'empty' => true,'label' => '雇用形態'));?>
<?= $this->Form->input('money_id',array('type' => 'select','options' => $list2,'empty' => true,'label' => '時給から'));?>
<?= $this->Form->input('region_id',array('type' => 'select','options' => $list3,'empty' => true,'label' => '都道府県'));?>
<?= $this->Form->input('sregion_id',array('type' => 'select','options' => $list4,'empty' => true,'label' => '小地区'));?>
<?= $this->Form->input('shokushu_id',array('type' => 'select','options' => $list5,'empty' => true,'label' => '職種から'));?>
<?= $this->Form->end('送信');?>

<table>
<?php if(isset($data)) :?>

<?php foreach($data as $post):?>

<tr><td><?= $this->Html->link('id',array('controller' => 'bottoms','action' => 'view',$post['Bottom']['id']));?></td></tr>
<tr><td><?= $post['Bottom']['username'];?></td>
<td><?= $post['Bottom']['title'];?></td>
<td><?= $post['Bottom']['email'];?></td>
<td><?= $post['Bottom']['comment'];?></td>
<td><?= $post['Region']['region_name'];?></td>
<td><?= $post['Sregion']['sregion_name'];?></td>
<td><?= $post['Money']['money_cate'];?></td>
<td><?= $post['Shokushu']['shokushu_name'];?></td>

</tr>
<?php endforeach;?>
<?php endif;?>
</table>

</div>

投稿 2017/11/22 19:11

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

ただいまの回答率

91.36%

関連した質問

同じタグがついた質問を見る

  • PHP

    15165questions

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

  • CakePHP

    1940questions

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

  • トップ
  • PHPに関する質問
  • cakephp でSearchプラグインでキーワードと複数のチェックボックなど色々な検索をしたいです。