CakePHPクッキング

独自のfindを定義するfindMethods

開発環境:CakePHP2.5.1

findをより便利に、よりスッキリ書くのに、findMethodsを使う方法があります。
findMethodsの基本的な使い方を見ていきましょう。

コントローラーの設定

まずはコントローラーの設定ですが、こちらは通常とほとんど変わりありません。

<?php
App::uses('AppController', 'Controller');

class SampleController extends AppController
{
    public $uses = array('Sample');

    public function index() {
        $data = $this->Sample->find('samplelist');
        $this->set(compact('data'));
    }
}

一つ違う点は、find内のパラメータがallやfirstではなく、独自のsamplelistを指定しています。

モデルの設定

次にモデルの設定です。

<?php
App::uses('AppModel', 'Model');

class Sample extends AppModel
{
    public $findMethods = array('samplelist' => true);

    protected function _findSamplelist($state, $query, $results = array()) {
        if ($state == 'before') {
            $query['conditions']['flg'] = 1;
            return $query;
        }
        return $results;
    }
}

findMethodsでコントローラーで指定したsamplelistをtrueで設定します。
そして、そのsamplelistをキャメルケースにしたものに、_findを付けた関数を上記のように準備します。
この関数は、2度呼び出され、1度目はstateにbeforeが指定され、queryに各種条件が入ってきます。
上記のように分岐させて、queryに条件を追加して書くことで、コントローラーにゴチャゴチャ書かずにModelで一括して書くことができます。

そして、2回目にこの関数が呼び出される時に、結果がresultsに帰ってくるので、上記ではそのままreturnさせていますが、戻り値に対して何らかの処理を加える事もできます。

findMethodsを使ってページネーションを使う

findMethodsを使ってページ送りを実装したい場合は、コントローラーの部分を通常のpaginateメソッドを使って呼び出してあげるだけで実現できます。

<?php
App::uses('AppController', 'Controller');

class SampleController extends AppController
{
    public $uses = array('Sample');

    public function index() {
        $this->paginate = array('samplelist');
        $data = $this->paginate('Sample');
        $this->set(compact('data'));
    }
}
WordPressとCakePHPの共存

サイトを作るのに便利なWordPress。プラグインも数多く用意されて

サイトマップの作成方法

Googleのウェブマスターツールに渡すためのサイトマップの作成方法で

INSERTしたIDを取得する

データを保存した後にINSERTされたデータのIDを使って何かの処理を

ファイルの存在確認やフォルダー内のファイル一覧取得

特定のファイルの存在を確認したい場合や特定のフォルダー内にあるファイル

リンクの最後に常にスラッシュをつける方法

URLの最後に常にスラッシュをつけるかつけないかを統一する方法は、UR

countやsumを使う時のフィールド名を指定する

CakePHPでcountやsumなどを使う場合、ちょっとした工夫が必

Formの便利な使い方

問い合わせフォームや会員機能など、WEBサイトを作る際に必ず必要になる

ヘルパーをオーバーライドする

CakePHPで便利な機能が詰まったヘルパーですが、時々もう少しこうだ

特定の時だけSQLの条件を追加するならSet::mergeを使う

SQLの条件を追加したい時に使うのがarray_mergeなどですが、

ページネーションではDISTINCTではなく、GROUP BYを使う

重複したデータを省く時に使うDISTINCTですが、ページ送りで使う時

Model内で別のModelを呼び出す

モデル内で別のモデルを使いたいケースがあった場合、次のようにすることで

CakePHPでGoogleAnalyticsAPIを使う

CakePHPでGoogleAnalyticsを使う方法について見てい

独自のfindを定義するfindMethods

findをより便利に、よりスッキリ書くのに、findMethodsを使

TCPDFを使ってCakePHPでPDFを作成

CakePHPでPDFを作成するには幾つかの方法がありますが、今回はT

JavaScriptをコードの最下部に配置

SEOの観点からJavaScriptのコードは一番下に記述したいところ

無限スクロールをさせる

TwitterやFacebookのタイムラインを見ていて、ページの下に

PHPExcelの導入

ExcelにDBのデータを表示して一覧を作ったり、請求書などのフォーマ

Warning: SplFileInfo::openFile〜の警告が表示されたら

ShellとWEBの両方で同一のModelを呼び出す時に「Warnin

連結されていないデータを抽出

通常、テーブルを連結してデータを取得するには、アソシエーションを利用し

データを取得する

データを取得したい時に少し変わった条件で取得したい場合があります。

PAGE TOP ↑