model

HABTMの中間テーブルがAppModelオブジェクトになってしまう問題の対応

今回の話はCake1.2で確認しましたが、1.3でも同じだと思います。 CakeのHABTMは中間テーブルのモデル(例えばDivisionsUserモデルなど)を作らなくても動いてくれて便利なのですが、意外とはまりポイントがあるので書きます。本解決策により、下記の方のような…

save前のcreateの使い方

Cakephp1.2.5を使ってます。 たまにごっちゃになる、model::create()の話。APIマニュアルにもあるとおり、Insert文が発行されるsave()の前にだけ使います。Update文の時はcreate()は使わない方が良いです。bakeしたコントローラでも、addアクションではcreat…

バリデーションメッセージをDryにしつつ国際化

CakePHP1.2.3を利用しています。CakePHPのバリデーションエラーメッセージは、各モデルに書いたりしますが、ここではgettextの__()を使った国際化の記述ができません。CakeBookにそのための回避策が一応書いてありました。http://book.cakephp.org/ja/view/1…

find条件とか、unbindModelのメモ

自分用メモ findの条件でcurrent_date使う場合。配列のキーを指定せずに、値に全部入れる <php $field = array( 'id' ); $cond = array( 'activeid' => $id, 'status' => 1, 'activeid_expire >= current_date' ); $result = $this->find( 'first', array( 'conditions' => $cond, 'fields' => $field ) ); Findの条件</php>…

意外と知られていない? queryメソッドで値をbindできるってこと

CakePHP 1.2.2を利用してます。この話は1.2だったらどれでも適用できると思います(cake1.1は分かりません)ーーーーーーーーーーーーーーーーー CakePHP2であれば、Model::query()が、擬似bindではなくPrepared StatementでSQL発行するので安心です http://…

Save()時に指定するフィールドリストをブラックリスト方式に

これはナイス記事。 Blacklist your model fields for save() CakePHPのModelでsave()をするとDBにデータを保存できるのですが、Postされたデータをそのままsaveに突っ込むと、思わぬフィールドまで変更がかかってしまう危険があります。これを避けるためにD…

動的にモデルで使っているテーブルを変更する方法

CakePHP 1.2.1を使ってます。モデルのテーブルを簡単に変更する方法です。コントローラで下記のようにすれば変わります $this->Model->setSource('tablename'); 一時的にテーブルを変えたいだけの場合は、 $oldtable = $this->Post->useTable; $this->Post->…

開発環境で自動でSQLにExplainをかけるコンポーネント バージョンアップ(1.1) PostgreSQL対応

English page is here. 何度もバージョンアップしてすみません。MASA-Pさんのコメントや、あつさんのトラックバックからPostgreSQLでは一部のExplain結果しか出力されない問題がわかりました。ありがとうございます。 PostgreSQLで検証してませんでした、手…

開発環境で自動でSQLにExplainをかけるコンポーネント バージョンアップ(1.0)

CakePHP 1.2.1を使ってます。昨日書いたAuto Explain Componentの記事ですが、反応はほとんどないと思って、ソースコードとか適当に書いた状態で公開してしまいました。反応があってうれしかったのですが、いくつか不具合を発見したので、いきなりバージョン…

開発環境で自動でSQLにExplainをかけるコンポーネント

CakePHP 1.2.1を使ってます。CakePHPはconfig/core.phpのdebug値を2にすると、画面にアクセスした際に発行されたSQL文が表示されます。これに加えて、発行したSQL文にExplainをかけてその結果を追加表示するコンポーネントを作りました。 動作チェックはMySQ…

半角,全角スペースのみだとエラーにするバリデーションチェック

環境はCakePHP 1.2 releaseです 入力項目に名前の入力とかある場合、必須項目チェックだけだと半角/全角スペースだけ入力されるとバリデーションを通り抜けてしまい、DBには値がスペースのみ格納されてしまう。これを避けるために、半角/全角スペースのみの…

色々なモデルからデータを読み込んでViewにセットする

「How to build a “dashboard” for your application in CakePHP」という記事 from nuts and bolts of cakephp TOP画面などで、例えば新着記事一覧とか、コメント一覧とか、色々なモデルから情報を取得して表示するダッシュボード機能を作りたいときの参考記…

よくある同一内容を入力させる時のバリデーションチェック

CakePHP 1.2RC3を利用してます会員登録画面などで、メールアドレスやパスワードを2回入力させ、その内容が一致しているか判定するのってよくありますよね。CakePHPのバリデーションチェックで、独自ルールを作ってそれに対応する方法です。 Viewにて入力項目…

updateAll時のアソシエーションを解除

環境はCakePHP1.2 RC3です。「updateAllで一気に複数レコードのUpdate」 http://d.hatena.ne.jp/cakephper/20081114/1226656901 で書いたように、updateAllを使えば一気に条件にマッチしたレコードをUpdateできます。ただ、モデルにbelongsToなどのアソシエ…

updateAllで一気に複数レコードのUpdate

CakePHP1.2 RC3の環境です。CakePHPは、saveメソッドでデータを保存する際に、データの配列のキーにidがあればUpdate,なければInsertしますが、これだと複数レコードを一気にUpdateするのは大変そうです。 例えば、年齢カラムがあり、年齢が20才以上の人の飲…

なぜか$this->Model->Saveがうまくいかないとき

かなりハマッタ。そしてこんなことに時間をかけてしまい、かなり悲しい。フォーム→確認画面→完了画面の流れで、なぜかあるパターンだけDBにSaveできない現象が発生。とくにPOSTされたデータを見ても怪しいところはない。確認画面では、下記のようにバリデー…

cakeのSQLでDISTINCTを扱う

DISTINCTは大文字じゃないと駄目!絶対! $this->Model->find($conditions, 'DISTINCT Hoge.numberid');Distinctって書いてて、 select `Distinct Hoge`.`numberid` from .....みたいなSQLになってエラーで結構な時間、悩んでしまった。

独自のバリデーション関数を追加(日本語の文字数チェック)

cakePHP1.2rc2を使ってますが、標準のバリデーションでmaxlengthを使って文字数チェックをしようとすると、日本語に対応していないのでバイト数をカウントしてしまいます。(例えば、「あああ」だったら9文字とカウント(UTF8))そこで、日本語の文字数をカウ…

cakePHPで複数パターンのバリデーションチェック

例えば選択されたラジオボタンによって必須項目が変わるような、あるモデルのファイル内で、複数パターンのバリデーションチェックをしたいと思い、昨日、新幹線の中で悶々としてました。 とりあえず下記のように対応してみた。 cakePHPのバージョンは、1.2R…