This document is for a version of CakePHP that is no longer supported. Please upgrade to a newer release! コールバックメソッド¶ CakePHPのモデル処理の前後にだけ何かしらのロジックを忍ばせたいとするなら、 モデルのコールバックを使ってください。 この機能はモデルクラス(AppModelクラスを含む)に定義できます。 これら特別な関数それぞれの期待される返り値には注意を払ってください。 beforeFind¶ beforeFind(array $queryData) find関連の操作の前に呼ばれます。 このコールバックに渡される $queryData はconditions、fields等の現在のクエリについての情報をもっています。 もしfind操作が始まることを(おそらく $q
CakePHPでよく使うモデルのfindメソッドやsaveメソッドなどの他にも、DBテーブルの情報を取得できるメソッドがある。 以下にメモを記します。 Model::getColumnTypes() フィールド名とカラムの型を取得できる $this->Model->getColumnTypes() Array ( [id] => integer [name] => text [created] => datetime [modified] => datetime ) テーブルのカラム名を全て取得する場合は array_keys($this->getColumnTypes()) Model::getColumnType() 指定したカラムの型を取得できる $this->Model->getColumnType("id") integer Model::hasField() 指定したフィールド
CakePHP1.3から使えるモデルの$virtualFieldsプロパティを使ってみた。 ユーザーや会員のテーブルに『生年月日』を持っていて、『年齢』で検索したいときなんかにとっても便利。 mysql> desc members; +-------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(32) | N
タイトルが微妙すぎて困る! CakePHPのアソシエーションを使うと、基本LEFTでテーブルをJOINしてfindなどされると思います。 これをINNER JOINにしたい!といっても、hasOneとbelongsToでtype=>”INNER”を指定すればINNER JOINできるのは周知の事実でございますが、hasManyでできねーのかよ!って思って触ってたら案の定できたのでメモ。 まぁSum limitedさんところで書いてある方法にほとんど近いのですが、beforeFindに書くと別のfindでも使ってしまうし、うーんと思ってたんだけど、findAllじゃなくてfindを使えば大丈夫そうなんですよ。 テーブル mysql> desc users; +----------+------------------+------+-----+---------+-------------
tsuchinokopro.com 2018 Copyright. All Rights Reserved. The Sponsored Listings displayed above are served automatically by a third party. Neither the service provider nor the domain owner maintain any relationship with the advertisers. In case of trademark issues please contact the domain owner directly (contact information can be found in whois). Privacy Policy
※この記事は 2010年に書かれた古い記事です。 「CakePHP 複数テーブル」でぐぐると3つ、ちょっとずつ違う話が出てくる。 1. コントローラの中で複数のモデルを使いたい。 コントローラの冒頭でvar $uses = array("Table1", "Table2", ...);$components、$helpers、$uses :: コントローラの属性 :: コントローラ :: CakePHPによる開発 :: マニュアル :: 1.2コレクション :: The Cookbook 2. モデルを結び付けたい。 hasOne とかそういうもの。 関連: モデルを結びつける :: モデル :: CakePHPによる開発 :: マニュアル :: 1.2コレクション :: The Cookbook 3. join を使いたい。 使えるのは inner join と left join。 f
This document is for a version of CakePHP that is no longer supported. Please upgrade to a newer release! モデル¶ モデルはアプリケーションのビジネスレイヤーを担当するクラスです。 すなわち、業務ドメインにおけるデータやその妥当性、トランザクションや 情報ワークフローの過程で発生する全てのことがらを管理する役割を負うということです。 モデルクラスは通常はデータを表すもので、 CakePHP のアプリケーションではデータアクセスに使われます。 具体的に言うと、モデルはデータベースのテーブルを表しますが、それに限らず ファイルや外部ウェブサービス、iCal のイベントや CSV ファイルの行など、 データを扱うあらゆるものに使われます。 ひとつのモデルを他のモデルと関連づけることができます
ほとんどの場合、このような形式を意識することはありません。 CakePHP の FormHelper やモデルの find メソッドは 全てこの形式に従っています。 FormHelper を使っていれば、 $this->request->data で簡単にこの形式のデータにアクセスできます。 データベースのテーブルにデータを保存するために CakePHP のモデルを使った 簡単なサンプルを以下に示します。 public function edit($id) { // フォームからポストされたデータがあるかどうか if ($this->request->is('post')) { // フォームのデータを検証して保存する... if ($this->Recipe->save($this->request->data)) { // メッセージをセットしてリダイレクトする $this->Sess
トランザクションを利用する…が、WEB系の場合は、ワンコールのトランザクションしか使えないので、複数のコール/Web APIにまたがる場合は、2フェーズコミットの方法を取る。まあ、チケット予約とかのように普通はダーティコミットの方式がパフォーマンスがよい。最後にチェックを入れて、整合性がなければ/既に予約済みだとかの場合は、エラーにしてしまう方式。社内業務の場合は、それほどパフォーマンスを必要としない or 途中の入力を破棄されるほうが痛い場合は、一時入力を保持する方式でセッションを作る。 ここはワンコールのトランザクションで。 ■Model Model/AppModel.php を書き換え class AppModel extends Model { var $db ; function begin() { $db = ConnectionManager::getDataSource($
CakePHPでトランザクションを使う方法をネットで検索したところ、 古いバージョンばかりヒットするのでメモしておきます。 AppModel.phpに下記を追記します。 function begin() { $dataSource = $this->getDataSource(); $dataSource->begin($this); } function commit() { $dataSource = $this->getDataSource(); $dataSource->commit($this); } function rollback() { $dataSource = $this->getDataSource(); $dataSource->rollback($this); }
cakePHPはMySQLと相性がいいが、トランザクションにちょっと癖がある。 通常、 $this->Model->begin(); でトランザクションが開始されるのだが、cakePHPでは単純に BEGIN というSQLを流しやがる。PostgreSQLならいいが、MySQLじゃだめじゃん…。 というわけで以下のソースをAppModelに追加すると正常にトランザクションができる。 function begin() { $db =& ConnectionManager::getDataSource($this->useDbConfig); $db->begin($this); } function commit() { $db =& ConnectionManager::getDataSource($this->useDbConfig); $db->commit($this); } fun
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く