読者です 読者をやめる 読者になる 読者になる

気ままなタンス*プログラミングなどのノートブック

プログラミングやRPGツクール、DTM、VOCALOIDについてのんびり書きます。

【CakePHP】中間テーブルの表現方法(hasAndBelongsToMany)

CakePHP

中間テーブル(連関エンティティ)に関してメモ。

以下のようなケースがあるとする

  • ゲームには複数のカテゴリがある
  • カテゴリは複数のゲームで使われる
    • ゲーム:カテゴリ・・・多:多となる

こんな時は、「ゲームカテゴリ」という中間テーブルを作成し、 それぞれのキーの組み合わせを外部キーとして持たせる。

CakePHPでは以下のような表現となる

  • ゲーム
<?php
class Game extends AppModel {
  var $useTable = "game";
  public $hasAndBelongsToMany = array(
    'Category' => array(
      'className' => 'Category',
      'joinTable' => 'game_category',
      'foreignKey' => 'game_id',
      'associationForeignKey' => 'category_id'
    )
  );
}

// gameテーブル・・・id, name, category_id

?>
  • カテゴリー
<?php 
class Category extends AppModel {
   var $useTable = "category";
}

// categoryテーブル・・・id, name
?>
  • ゲームカテゴリ
<?php
class GameCategory extends AppModel {
  var $useTable = "game_category";
}

// game_categoryテーブル・・・id, game_id, category_id
?>