cakephp3FriendsOfCake/searchプラグインの日本一簡単な使い方

2016年12月28日更新 view: 173 view
http://tagamidaiki.com/wp-content/uploads/2014/01/140107.png

FriendsOfCake/search って何よ?

cakephp の開発メンバーが作ったSearchプラグインらしい。
以前のとは違うものみたい。

早速インストール

composer に
friendsofcake/search
をインストールするよう記述。

そして、

sshで
composer update friendsofcake/search

でインストール完了。

条件

articlesテーブルに
・id
・name
・email

の3フィールドを用意。
これを検索してみる。

・ArticlesController.php

public function initialize()
{
parent::initialize();

//どのアクションで使うか指定必須。
//でないと $this->request->query の値が取れない
$this->loadComponent('Search.Prg', [
'actions' => ['index', 'search']
]);
}

ここで actions を必ず指定すること。
でないと動かない。

model/table/ArticlesTable.php

use Search\Manager;//Searchするときに必須
<?php

namespace App\Model\Table;
use Cake\Validation\Validator;
use Cake\ORM\RulesChecker;

use Search\Manager;//Searchするときに必須

class ArticlesTable extends AppTable
{

public function initialize(array $config)
{
$this->addBehavior('Search.Search');
}


public function searchConfiguration()
{
//hanako
//ha* でlike検索
$search = new Manager($this);

//完全一致
// $search->value('name');


// like 検索 ha で検索すると chanko , hanako がマッチ
// $search
// ->like('name', [
// 'before' => true,
// 'after' => true
// ]);


// 複数フィールドを曖昧検索
// email , もしくは name フィールドより
// $search
// ->like('name', [
// 'before' => true,
// 'after' => true,
// 'field' => [$this->aliasField('name'),$this->aliasField('email')]
// ]);
//
//



// 大なり小なり
// $search->compare('id',
// [
//// 'operator' => '<',//指定したものより小さいものを取得
// 'operator' => '>=',//指定したものより大きいものを取得
// ]
// );


// つなげてやってみよう
// name に hanako , id に 100 を入れた場合、
// and検索で hanako , 100 にマッチするものを取得
$search
->value('name')
->compare('id',
[
'operator' => '>='
]
);




return $search;
}




}

ArticlesController.php

public function search()
{
$res = [];
if($this->request->query){
$query = $this->Articles
->find('search', ['search' => $this->request->query]);
$res = $query->all();
}


$this->set(
compact(
'res'
)
);
}

search.ctp

スポンサードリンク


<h2>結果</h2>
<?php

foreach ($res as $v) {
echo $v->id." ".$v->name." ".$v->email."<br>";
}

?>




<?= $this->Form->create('Post'); ?>
<?= $this->Form->input('name', ['type'=>'text']); ?>
<?= $this->Form->input('id', ['type'=>'text']); ?>
<?= $this->Form->button(__('Submit')); ?>
<?= $this->Form->end(); ?>

これで検索した時にnameとidを検索することができる。

Finderを2つ使いたい場合

$query = $this->Users->find('Girl')->find('search', ['search' => $this->request->query]);

という感じで find を 2連発してやbれ良い。

スポンサードリンク

関連記事

関連カテゴリ