Attention! Translated article might be found on my English blog.
ラベル CakePHP の投稿を表示しています。 すべての投稿を表示
ラベル CakePHP の投稿を表示しています。 すべての投稿を表示

2015年1月28日水曜日

CakePHPでデータ出力件数を制限する

件数制限というよりはページャの話です。

参考: ページ付け(Pagination) — CakePHP Cookbook 1.3 ドキュメント

コントローラのpaginateプロパティでlimitとorderを指定する。orderも必須なようだ。

入門ページのブログチュートリアル(入門 — CakePHP Cookbook 2.x ドキュメント)を例にとると、PostsControllerのpaginateを例えば以下のように指定する。

    var $paginate = array(
        'limit' => 10,
        'order' => array(
            'Post.id' => 'asc'
        )

    );

出力数を制限したindex()

$this->set('posts', $this->Post->find('all'));

を

$this->set('posts', $this->paginate('Post'));

に変更する。これでひとまず件数を制限できる。
$this->Post->xxxxという形で書かないのはpaginatorがコントローラに紐付いてるからでしょうかね。


CakePHPのモデルでテーブル名を指定する

参考: モデルの属性 — CakePHP Cookbook 2.x ドキュメント
参考: cakephpのmodelでテーブルを指定する | イテルの一日一問

既存DBのテーブル名だと微妙にCakePHPの命名規則と合わない。そんなとき!
ModelクラスのuseTableプロパティを明記することで任意のテーブルを指定できるようです。
例えばLogというモデル名の場合、デフォルト動作ではlogsというテーブルが参照されますが、

class Log extends AppModel {
    var $useTable = 'log';
}

と、useTableを明記することで好きなテーブルを参照することが可能です。

フレームワーク側との命名規則の不一致やよじれはモデルで吸収して、ビューやコントローラはなるべくCakePHPの命名規則に従うのが良いかもですね。

CakePHP 2.5.8でPostgreSQLの接続にIPv6を利用していた

参考: PHP/CakePHPがPostgreSQLに接続できない場合の原因をいくつか紹介 - ウェブ関連技術調査

/etc/hostsの内容やOS次第かなとは思いますが、app/Config/database.php内のDB設定で'host'が'localhost'の場合IPv6で接続しようとしており、

SQLSTATE[08006] [7] FATAL: Ident authentication failed for user 'hoge'

というようなエラーが出て接続できませんでした。自鯖の環境はCentOS 6です。
修正前のpg_hba.confは

local   all         all                               trust
host    all         all         127.0.0.1/32          trust

host    all         all         ::1/128               ident

としていたのですが、::1/128の方もtrustにすると無事接続できました。
pg_hba.confを変えたくない場合は上述のdatabase.phpの'host'を'127.0.0.1'と明示的にIPv4を指定することでも接続可能でした。

あんまりCakePHPは関係ないですかねこれ。