WebプログラミングV

 目次へ 前へ 次へ

2015/12/21 久米

VCakePHP

3. 検索

3.1 全検索

  ファイル コード例 備考
C src>Controller>
NekoChansController.php
<?php
namespace App\Controller;

use App\Controller\AppController;

class NekoChansController extends AppController{

    public function index(){
	$nekoChans = $this->NekoChans->find();
	$this->set('nekoChans', $nekoChans);
    }

}
namespaceはこのクラスを
一意に識別するためのもの。
ツリー構造で指定。
例 App\Controller\NekoChansController
ほとんどが、フォルダ構成になっている。

useはこのクラスが使う他のクラスを指定。
import文と同じ。
M src>Model>Table>
NekoChansTable.php
無ければデフォルトでオブジェクト生成してくれるので。今回は不要  
V
その1
src>Template>NekoChans>
index.ctp
<h1>猫ちゃんず</h1>
<pre><?php print_r($nekoChans); ?></pre>
 
V
その2
src>Template>NekoChans>
index.ctp
<h1>猫ちゃんず</h1>
<table>
<tr><th>id</th><th>名前</th><th>特技</th><th>年齢</th></tr>
<?php foreach($nekoChans as $nekoChan): ?>
    <tr>
    <td><?= $nekoChan->id ?></td>
    <td><?= h($nekoChan->name) ?></td>
    <td><?= h($nekoChan->tokugi) ?></td>
    <td><?= h($nekoChan->age) ?></td>
    </tr>
<?php endforeach; ?>
</table>
<?= 変数 ?>はコラム参照


h()はhtmlspecialchars()
のラッパー。
CakePHP独自仕様。
  アクセス http://localhost/web3/caketest/neko-chans/  


参考)Template>NekoChansはコンテンツのみ定義、Template>Layoutはhtml全体を定義(後述)

 

演習1 ネコカフェメニューの、全検索してみよ。

 

3.2 絞り込み検索

  ファイル コード例 備考
C src>Controller>
NekoChansController.php
<?php

namespace App\Controller;

use App\Controller\AppController;

class NekoChansController extends AppController{

    public function index(){
	$nekoChans = $this->NekoChans->find();
	$this->set('nekoChans', $nekoChans);
    }

    public function findNeru(){
	$nekoChans = $this->NekoChans->findNeru();
	$this->set('nekoChans', $nekoChans);
    }

}
 
M src>Model>Table>
NekoChansTable.php
<?php
namespace App\Model\Table;

use Cake\ORM\Table;

class NekoChansTable extends Table{
    
    public function findNeru(){
	$result=$this->find()->where(['tokugi'=>'寝る'])->order(['age'=>'Desc']);
	return $result;
    }

}
直接SQL文を発行することも
可能であるが
V src>Template>NekoChans>
find_neru.ctp
上記3.1index.ctpと同じコード  
  アクセス http://localhost/web3/caketest/neko-chans/find-neru  

 

find()から連鎖して使用 意味
where([ field名 => 値 ]) 条件句 ->where(['name like ' => '%ちゃん%'])
order( [ field名 => 'Asc' または 'Desc' ] ) ソート順 ->order(['age'=>'Desc'])
select([ field1, field2, …]) 取り出す列指定 ->select([ 'name', 'age'])
offset( 整数 ) 取り出す位置 ->offset( 20 )->limit( 10 )
limit( 整数 ) 取り出す個数  

 

 

 

演習2 ネコカフェメニューの、絞り込み検索してみよ。

 

コラム:<?= $abc ?>とは

PHP タグ

下記の3つは同じ意味。HTMLに出力。

<?php print $abc; ?>
<?php echo $abc; ?>
<?= $abc ?>

PHP5.4からは3番目がなにも設定せずに使用できることとなった。
CakePHP3では3番目をメインに使用している。