hangi CakePHP'de ilişki kullanıcı grupları için kullanılmalıdır?

1 Cevap php

Benim tenis uygulamada, benim 'maç' tablo iki oyuncu (besbelli) sahiptir. Ben kullanıcı kimlikleri izlemek için bir yol olarak player1_id ve player2_id kullandım. Ben olsa bir User_id yabancı anahtar dahil değil.

Ben gelen oyuncunun isimlerini çekmek istediğiniz bir 'kullanıcı' tablo da vardır.

'Maç' birden fazla kullanıcı var ve kullanıcılar birden fazla modeli var, çünkü aşağıdaki model yapılandırma çalışacak eğer, ben merak ediyorum:

Ben Kur, bu gibi kullanıcı modeli var:

var $name = 'User';
var $hasMany = array(
'Match' => array(
'className' => 'Match',
'foreignKey' => array( 'player1_id', 'player2_id'),
'dependent' => true,
)

Bu gibi ve maç modeli:

var $name = 'Match';
var $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' =>  'user_id',
'conditions' => '',
)

Her oyuncu User_id = player1_id veya player2_id için kullanıcıyı ilk / son isim görüntülemek gerekir. Bu çalışır mı? Bir yabancı anahtar bir dizi kullanabilir miyim? Ve bir model operasyon kullanım Bir 'veya' arama ne zaman?

Ya da (bir maç gibi, ya da bir grup toplantısı olabilir) bir tablo yapısı birden fazla kullanıcı ile daha iyi bir yolu var mı?

Cheers, Paul

1 Cevap

Ben Maç ilişki işe> Kullanıcı bir yabancı anahtar olarak bir dizi sanmıyorum, ama sonra tekrar denedim hiç. Dediğin gibi, yabancı kimliği yok ki, beri tek Maç> user_id ile kullanıcı ilişkisi yabancı gibi olsa da çalışmaz.

Kavramsal temiz yolu uygun bir hasAndBelongsToMany ilişki olacaktır. Sonuçta, bir maç birçok oyuncu var ve oyuncuların çok maç var. Yani gerçekten bir çok-çok ilişkisi bakıyoruz.

Bir belongsTo / hasMany ilişki ile sahte için, bunu yapmak gerekir:

// user model
var $hasMany = array(
   'MatchAsPlayer1' => array(
       'className'  => 'Match',
       'foreignKey' => 'player1_id',
   ),
   'MatchAsPlayer2' => array(
       'className'  => 'Match',
       'foreignKey' => 'player2_id',
   )
);

// match model
var $belongsTo = array(
    'Player1' => array(
        'className'  => 'User',
        'foreignKey' =>  'player1_id'
    ),
    'Player2' => array(
        'className'  => 'User',
        'foreignKey' =>  'player2_id'
    )
);

Çirkin kısmı, ilgili maçlar ['MatchAsPlayer1'] bölünmüş ve ['MatchAsPlayer2'] almak istiyorum kullanıcı modeli, bulunmaktadır. O birleştirmek için afterFind geri arama biraz hile yapabiliriz, ama genel olarak güzel bir çözüm değil. Sadece hasAndBelongsToMany için gidin. :)