2010-03-05 45 views
0

在我的網球申請中,我的'比賽'表有兩名球員(顯然)。我使用player1_id和player2_id作爲跟蹤用戶ID的方式。儘管我沒有包含一個user_id外鍵。哪個cakephp關係應該用於用戶組?可以有很多用於foreign_ID的數組嗎?

還有一個'用戶'表,我想從中拉玩家的名字。

因爲「匹配」有一個以上的用戶和用戶已經超過一個模式,我想知道,如果以下機型配置將工作:

我設置的用戶模型是這樣的:

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

,匹配模式是這樣的:

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

我需要顯示的用戶名/姓每個球員,其中USER_ID = player1_id或player2_id。這會工作嗎?外鍵可以使用數組嗎?模型操作可以在搜索時使用'或'嗎?

或者是否有更好的方法來構建一個表(比如匹配,或者可以是一個組會議)與多個用戶?

乾杯, 保羅

回答

1

我不認爲一個數組作爲對用戶的外鍵>匹配關係的工作,但後來我又從來沒有嘗試過。作爲外國人的單個匹配>用戶與user_id的關係將不起作用,因爲正如你所說的那樣,因爲該外部ID不存在。

從概念上講,最清潔的方式將是一個正確的hasAndBelongsToMany關係。畢竟,一場比賽有很多球員,而球員有很多比賽。所以你真的在尋找一個多對多的關係。

要與屬於關聯/關係的hasMany假的,你需要做的是:

// 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' 
    ) 
); 

醜陋的部分是在用戶模式,在那裏你會收到相關比賽分成['MatchAsPlayer1']['MatchAsPlayer2']。你可以在afterFind回調中做一些欺騙來合併這些,但這不是一個好的解決方案。只要去hasAndBelongsToMany即可。 :)

+0

謝謝。 HASBTM確實打擊了我,但還不確定。我想可能會有嘗試的辦法,因爲你可能有類似的情況,比如有三/四名或更多玩家的桌子。 因爲每場比賽都有兩名球員,每個用戶/匹配的HASBTM模型是否也會採用上述陣列? – Paul 2010-03-06 01:22:07

+0

@Paul對不起,我不明白這個問題。儘管如此,通常的首字母縮寫詞是「HABTM」。 – deceze 2010-03-06 02:37:01

+0

謝謝你的幫助。 HABTM指出。 我想明白的是,如果player1_id和player2_id都應該在用戶模型中被引用?就像上面那樣。 由於比賽表有兩個球員ID,是否需要在HABTM關係中引用每個ID?如果比較一下,一個帶有標籤和帖子HABTM的博客,每個人只有一個外鍵用於另一個。 希望更有意義。非常感激。 – Paul 2010-03-06 19:40:09

相關問題