HasAndBelongsToMany

class Recipe extends AppModel {
    public $name = 'Recipe';
    public $hasAndBelongsToMany = array(
        'Ingredient' =>
            array(
                'className'              => 'Ingredient',
                'joinTable'              => 'ingredients_recipes',
                'foreignKey'             => 'recipe_id',
                'associationForeignKey'  => 'ingredient_id',
                'unique'                 => true,
                'conditions'             => '',
                'fields'                 => '',
                'order'                  => '',
                'limit'                  => '',
                'offset'                 => '',
                'finderQuery'            => '',
                'deleteQuery'            => '',
                'insertQuery'            => ''
            )
    );
}

className: 元モデルに関連付けられるモデルのクラス名。Recipe HABTM Ingredient を定義したい場合、’Ingredient’となります。

joinTable: このアソシエーションに使う中間テーブルの名前。テーブル名がHABTMテーブルの規約に従っていない場合に指定します。

with: joinするテーブルのモデル名を定義します。デフォルトではCakePHPはモデルを自動的に生成します。上記のサンプルでは、IngredientsRecipeです。このキーを使うことで、このデフォルトの名前を上書きすることができます。この名前のモデルクラスを生成することで、他の通常のモデルと同じようにたとえば追加の列や情報を取得するようにカスタム動作を定義できます。

foreignKey: アソシエーション先のモデルを検索するための外部キーの名前。これは複数のHABTMを定義するためによく使われます。このキーのデフォルト値はアソシエーション先のモデルの単数形に _id がついたものです。

associationForeignKey: アソシエーション先のもう一方のモデルを検索するための外部キーの名前。これは複数のHABTMを定義するためによく使われます。このキーのデフォルト値はアソシエーション先のモデルの単数形に _id がついたものです。

unique: bool値、または文字列で keepExisting を指定します。
trueを指定すれば(これがデフォルトです)、新しいレコードを挿入する前に既存の関連するレコードを削除します。
falseを指定すれば、saveを実行してレコードを挿入したあとに、joinできないレコードがあれば削除されます。
keepExisting を指定すれば、 true を指定した時と似ていますが、既存の関連レコードは削除されません。

conditions: find()に指定するconditionsと互換性のある配列もしくはSQL文字列を指定します。アソシエーション先のテーブルに条件を指定したければ、’with’ に指定したモデルを使って必要なbelongsToアソシエーションを定義してください。

fields: アソシエーション先のモデルから取得するフィールドのリスト。デフォルトで全フィールドが含まれます。

order: find()に指定するorderと互換性のある配列もしくはSQL文字列を指定します。

limit: アソシエーションモデルのデータの最大行数。

offset: アソシエーションモデルのデータをスキップする行数。

finderQuery, deleteQuery, insertQuery: データ取得、削除、追加の時に使われるSQLクエリを指定します。これは、動作をカスタマイズしたい時に使います。

参考

http://book.cakephp.org/2.0/ja/models/associations-linking-models-together.html

CakePHPのHasAndBelongsToManyを使う

http://www.webopixel.net/cakephp/259.html

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です