Nasıl CakePHP ile HABTM tabloları ele gelmez / bir 'id' alanına olmadan?

6 Cevap php

Nasıl CakePHP bir id sütunu yok tabloları ile anlaşma nedir?

HABTM is a "has and belongs to many" table, which means a many to many database relationship

Ben bazı ilişki verileri kaydetmek için çalışıyorum, ama Kek id farklı bir tablo için bu yüzden, ancak kaydetmek için çalışıyor bu tablo id kolonu yok "() LAST_INSERT_ID SEÇ" istiyor.

Özellikle, "Oyunlar" ve "Oyuncular" için tablolar var, ve bir ilişki tablo "game_players" denir. game_players alanları game_id ve player_id vardır ve ben ilişki verileri kaydetmek olamaz bu masada bulunuyor.

Netleştirmek için: bu soruna neden game_player masa. Bu tablo yok, ne de, bir id alanına sahip olmalıdır. Sadece oynatıcı ve oyun arasındaki ilişkiyi saklamak, ve birincil anahtar (game_id, player_id)

Nasıl CakePHP Bu durum / ilişkiyi ele?

6 Cevap

Oyun HABTM Oyuncu mu, ya da tam tersi? Eğer öyleyse, size katılmak masa games_players üzerinde bir kimlik alanı olmamalıdır. Ve sizin gibi bir veri dizisi ile Oyunu tasarrufu arayarak kendisine verileri kaydetmek gerekir

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

Bu durumda, Kek denemek ve son insert id almazsınız.

Ancak, Oyun HABTM Oyuncu değil ve doğrudan modeli GAMEPLAYER üzerinde tasarruf arıyorsanız, o Kek sözleşmelere uyması için bir kimlik alanı olmalıdır.

var $primaryKey = 'example_id'; $primaryKey is what do you looking for.

Sadece model sınıfı bu yerleştirin.

CakePHP bileşik birincil anahtarları desteklemiyor. Lütfen game_players masaya 'id' denilen bir birincil anahtarı ekleyin. Model-and-Database-Conventions

Şeylerin normal akışı içinde katılmak tablo aslında aranmalıdır games_players değil game_players - tablo game_players denir eğer o size ilgili model dosyaları bu Cake söylemek gerekir.

Bu sadece bir katılmak tablo ise, o zaman normal bir id alanı gerekmez. Orada size katılmak tabloya id (ya da diğer alanlar) eklemek istediğiniz durumlar vardır ama bunu yapmak zorunda değilsiniz.

Zaman ve çaba bir konu olarak, sadece devam edin ve id alanı eklemek için daha iyi olurdu? Sen sonunda beklenen olmasaydı şekillerde bu tablonun ihtiyaçlarını genişletebilir.

Sadece bir öneri.

Diğerleri de söylediğim gibi, masa games_players aranmalıdır ve (pasta o automagically ilgilenir) doğrudan kullanmak asla. Siz kurulum Oyun ve Oyuncu modeller arasındaki ilişkiler gerekir, ve kek gerisini halleder.