ホーム > ブログ > タグ : CakePHP
2010年02月18日

CakePHP findでMAX、MIN

CakePHPのfindでMAX、MIN関数などを使う場合は、
fieldsキーに指定します。

サンプルデータ:

+----+--------+
| id | number |
+----+--------+
|  1 |    100 |
|  2 |     10 |
|  3 |   1000 |
+----+--------+

サンプルコード:
$result = $this->Example->find('first', array("fields" => "MAX(Example.number) as max_number"));

$resultの出力結果:
Array
(
    [0] => Array
        (
            [max_number] => 1000
        )

)

SUM(集計)も同様に指定できます。

サンプルコード:
$result = $this->Example->find('first', array("fields" => "SUM(Example.number) as sum_number"));

$resultの出力結果:
Array
(
    [0] => Array
        (
            [sum_number] => 1110
        )

)

実行環境
CentOS 5.3
CakePHP 1.3.0-beta

CakePHPで開発を行っているとプリントデバッグにはpr()ばかり使用してしまいがちですが、
よりデバッグに向いているdebug()が用意されてます。

ノーマルに出力

まずは、普通にdebugしてみます。
結果はpr()と同じになります。

サンプルコード:
$vars = array("dog", "cat", "monkey");
debug($vars);

出力結果:
Array
(
    [0] => dog
    [1] => cat
    [2] => monkey
)


‘<'と'>‘をHTML特殊文字に変換して出力

第2引数にtrueを渡すと、
変数の中身に含まれる’<'は'&lt;‘に、’>'は’&gt;‘に変換して出力してくれます。
※デフォルトはfalse

サンプルコード:
$var = '<img src="/img/hoge.jpg">';
debug($var, true);

出力結果:
<img src="/img/100217_1.jpg">

‘<'と'>‘がHTML特集文字に変換されているので、
imgタグはHTMLタグとして評価されず、
ブラウザ上に画像は表示されません。

ファイル名と行番号を一緒に出力

第3引数にtrueを渡すと、debugを記述したファイル名と行番号を合わせて表示してくれます。
※デフォルトはfalse

サンプルコード:
$var = "Hello world!!";
debug($var, false, true);	

出力結果:
app/controllers/hoges_controller.php (line 199) 
Hello world!!

これはプリントデバッグを複数仕込んだときに各々を識別するのに便利です。

以上です。

※debug()は、app/config/core.phpで定義したデバッグ変数「debug」が0より大きい場合にのみ有効です。

実行環境
CentOS 5.3
CakePHP 1.3.0-beta

cronジョブからCakePHPのアクションを実行する方法です。

1. まずはcronジョブがキックするスクリプトを作成します。

webroot/files/kickme.php
<?php
  $_GET['url'] = "hoges/add";
  require_once( dirname( dirname(__FILE__) ) . "/index.php" );
?>

上記の例では、hogesコントローラのaddアクションを実行します。

※kickme.phpには実行権限を与えてください。

2.cronジョブを設定します。

crontab -e
0 4 * * * php -f /path/to/app/webroot/files/kickme.php

上記の例では毎日4時0分にkickme.phpを実行します。

以上です。

cronがキックするスクリプトを公開ディレクトリに置きたくない場合は、
非公開ディレクトリに移してrequire_onceのパス指定を調整してください。