0

私のテニスアプリケーションでは、「マッチ」テーブルには2人のプレーヤーがいます(明らかに)。ユーザーIDを追跡する方法としてplayer1_idとplayer2_idを使用しました。ただし、user_id外部キーは含めていません。

プレイヤーの名前を取得したい「ユーザー」テーブルもあります。

'match'には複数のユーザーがいて、ユーザーには複数のモデルがあるので、次のモデル構成が機能するかどうか疑問に思います。

私は次のようにユーザーモデルを設定しました:

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である各プレーヤーのユーザーの名前/名前を表示する必要があります。これは機能しますか?外部キーは配列を使用できますか?また、モデル操作で検索時に「または」を使用できますか?

または、複数のユーザーでテーブルを構成するためのより良い方法(試合のように、またはグループ会議の場合もあります)はありますか?

乾杯、ポール

4

1 に答える 1

1

User> Matchの関係で外部キーとしての配列が機能するとは思いませんが、これも試したことはありません。ただし、あなたが言ったように、その外部IDは存在しないため、外部としての単一の一致>ユーザー関係user_idは機能しません。

概念的には、最もクリーンな方法は、適切なhasAndBelongsToMany関係です。結局のところ、試合には多くのプレーヤーがいて、プレーヤーには多くの試合があります。つまり、あなたは本当に多対多の関係を見ているのです。

これをbelongsTo/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に行くだけです。:)

于 2010-03-06T01:09:01.960 に答える