3

idCakePHP は列を持たないテーブルをどのように処理しますか?

HABTM は「多に属し、多に属する」テーブルであり、多対多のデー​​タベース関係を意味します。

いくつかの関係データを保存しようとしていますが、Cake は「SELECT LAST_INSERT_ID()」を望んでいますが、保存しようとしているテーブルには id 列がないため、id は別のテーブルのものです。

具体的には、「Games」と「Players」のテーブルと、「game_players」という関係テーブルがあります。game_players にはフィールド game_id と player_id があり、関係データを保存できないのはこのテーブルです。

明確にするために: 問題を引き起こしているのは game_player テーブルです。このテーブルには id フィールドがありません。プレイヤーとゲームの間の関係のみを保存しており、主キーは (game_id, player_id) です

CakePHP はこの状況/関係をどのように処理しますか?

4

7 に答える 7

8

var $primaryKey = 'example_id'; $primaryKey はあなたが探しているものです。

これをモデルクラスに配置するだけです。

于 2010-08-10T08:03:57.183 に答える
5

ゲーム HABTM プレイヤーですか、それともその逆ですか? その場合、結合テーブル games_players に ID フィールドを設定しないでください。そして、次のようなデータ配列を使用してゲームで save を呼び出すことにより、データを保存できるはずです

$this->Game->save(array(
  'Player'=>array(
    'Player'=>array(
      1,4,5,9 // Player IDs
    )
  )
));

この場合、Cake は最後の挿入 ID を取得しようとしません。

ただし、Game が HABTM Player ではなく、モデルの GamePlayer で直接 save を呼び出す場合は、Cake の規則に適合する ID フィールドが必要です。

于 2009-03-25T08:37:20.877 に答える
3

CakePHP は複合主キーをサポートしていません。「id」という主キーを game_players テーブルに追加します。モデルとデータベースの規約

于 2009-03-25T03:50:04.157 に答える
0

他の人が述べたように、あなたのテーブルはgames_playersと呼ばれるべきであり、直接使用するべきではありません (cake が自動的に処理します)。Game モデルと Player モデルの間の関係をセットアップする必要があり、残りはケーキに任せます。

于 2009-03-25T15:26:07.137 に答える
0

「Cake アプリケーションのデータベース内のすべてのテーブルには、テーブルの主キーとして id が必要です。」(Packt Publishing 発行の Anupom Syam と Ahsanul Bari による CakePHP アプリケーション開発の第 3 章)。http://jaimemontoya.com/cakephp-application-development/#20191203155934を参照してください。

于 2020-01-21T13:07:14.467 に答える