« [CakePHP1.3] 秀和システムの本 メモ4 - データベースの利用1 | トップページ | ウイルスバスターのポップアップ広告を消す »

2012年6月 4日 (月)

[CakePHP1.3] 秀和システムの本 メモ5 - モデルクラスのメンバ変数とコールバック

書籍「CakePHP 1.3によるWebアプリケーション開発―オープンソース徹底活用」(秀和システム、掌田 津耶乃)のメモ その5。

データベースの利用 その2、モデルクラスのメンバ変数とコールバックメソッド。

モデルクラスのメンバ変数

$useDbConfig = '設定変数名の文字列'

database.php (メモ その4) 内に記述した どのデータベース接続($default$testあるいは自分で接続情報を記述した変数名)を利用するかを指定する。
変数名を文字列として指定する。

このメンバ変数が指定されないときには、$default が利用される。

$useDbConfig = 'test';

$useTable = 'テーブル名の文字列'

使用するテーブル名を文字列で指定する。

このメンバ変数が指定されないときには、モデルクラス名から自動的に生成される。
たとえば、モデルクラス名が「RedApple」だった場合、これを複数形のアンダースコア記法にした「red_apples」が使用するテーブル名となる。

$useTable = 'my_apples';

$primaryKey = 'フィールド名の文字列'

主キー列の列名を文字列で指定する。

このメンバ変数が指定されないときには、id列を主キー列として扱う。

$primaryKey = 'code';

$displayField = 'フィールド名の文字列'

find('list')メソッド (メモ その4) で抽出する列名を、 文字列で指定する。

このメンバ変数が指定されないときには、name列あるいはtitle列が抽出される。
また、find('list', array( 'fields' => 'username' ) ); のように、第2引数で抽出するフィールド名を指定した場合、 それが優先される。

$displayField = 'username';

$order = 'モデル名.フィールド名 + {ASC|DESC}'、$order = 並び順配列

ORDER BYの指定。1列のみの場合、文字列で指定する。
また、複数列ある場合には、配列で指定する。

$order = 'RedApple.name DESC';

$order = array(
    'RedApple.name DESC',
    'RedApple.category_id ASC',
);

$data

findメソッドなどで抽出したデータが保存される変数。

たとえば、find('all') の場合、次のような配列となっている。
$arr[行番号(0始まり)][モデル名][フィールと名]

モデルクラスのコールバックメソッド

beforeFind( SQL文配列 )

findメソッド呼び出し前に、beforeFindメソッドが呼び出される。
引数に、実行前のSQL文に関する連想配列が渡されるので、必要なら、これを修正し、この配列を戻り値として返す。

引数

SQL文配列
findメソッドの第2引数 オプション連想配列 (メモ その4)と同じ形式。
必要なら修正する。
Array
(
    [conditions] =>
    [fields] =>
    [joins] => Array
        (
        )
    [limit] =>
    [offset] =>
    [order] => Array
        (
        )
    [page] =>
    [group] =>
    [callbacks] =>
)

戻り値

引数で受け取った SQL文配列 を返す。

function beforeFind( $queryData )
{
    if ( empty($queryData['limit']) )
    {
        $queryData['limit'] = 10;
    }

    return $queryData;
}

afterFind( 結果データ, 主キー )

findメソッド呼び出し後に、afterFindメソッドが呼び出される。
引数に、抽出したデータと主キーが渡される。必要なら、抽出データを修正し、戻り値として返す。

引数

結果データ
抽出結果のデータ配列。findメソッドの戻り値 (メモ その4) のデータ。
必要なら修正する。
主キー (?)
(よく分からない。)

戻り値

引数で受け取った 結果データ を返す。

function afterFind( $result, $primary )
{
    for( $i = 0; $i < count($result); $i++ )
    {
        if ( $result[$i]['RedApple']['stock'] == 0 )
        {
            array_splice( $result, $i, 1, NULL );
        }
    }

    return $result;
}

beforeSave()afterSave()

saveメソッド (メモ その4) の実行前に beforeSave が、実行後に afterSave が呼び出される。

引数

なし

戻り値

beforeSave のみ
FALSE … 保存処理を中止する。
TRUE … 保存処理を続行する。

beforeDelete()afterDelete()

deleteメソッド (メモ その4) の実行前に beforeDelete が、実行後に afterDelete が呼び出される。

引数

なし

戻り値

beforeDelete のみ
FALSE … 保存処理を中止する。
TRUE … 保存処理を続行する。

onError()

SQL文 SELECT、INSERT、UPDATE、DELETE のいずれかが実行され、エラーが発生したときに onErrorメソッドが呼び出される。

引数

なし

戻り値

なし

関連

« [CakePHP1.3] 秀和システムの本 メモ4 - データベースの利用1 | トップページ | ウイルスバスターのポップアップ広告を消す »

プログラム・スクリプト」カテゴリの記事

2019年11月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Amazonリンク

ダイビング写真(swf)

ブログ内検索

  • Google
    WWW を検索
    ブログ内を検索

リンク(いつもお世話さま)

  • ソニーストア
     iTunes Store(Japan)
    Just MyShop(ジャストシステム)
    ブックオフオンライン
無料ブログはココログ