DEVELOPERS BLOGデベロッパーズブログ

  1. HOME > 
  2. 加藤 正人 > 
  3. タイトル

CakePHP でストアドファンクション

2015/01/24

CakePHP でストアドファンクション

 

CakePHP のモデルでテーブルのフィールド値をある一定の計算式で処理してから取り出したいことがたまにある。

単純な式ならそのまま SQL 文で書いてもよいが、式自体が複雑であったり、利用する場面がいくつもある場合には、ストアドファンクションとして保存し利用したいことがある。

たとえば、「緯度経度で与えられる2地点間の距離を計算する PHP ライブラリ」で紹介した Hubeny の公式による距離計算を SQL サーバ側で行うことができれば、クエリーに距離による条件を含めることも可能になる。

モデルに機能を追加するのであれば、ビヘイビアで定義すれば実現できそうだ。

実装例

{APP}/Plugins/LambdaTools/Model/Behavior/HubenyDistanceBehavior.php として以下の内容を配置する。({APP} は CakePHP の APP 定数で示されるフォルダ)

そして、モデル定義で以下のようにすることでそのモデルの実体テーブルを保持するデータベースにストアドファンクション hubeny_distance() が定義され、SQL 文内で利用可能になる。

あるいはオプションパラメータを指定して下記のようにする。

以上。

この記事は加藤 正人さんが書いています!

加藤 正人

氏名
加藤 正人
役職
多分SE
血液型
秘密
出没
美味しいもののあるところ
特色
タヒチ大好き。ちょいメタボ。